Итак, выбирая общие указатели для ящиков как учебное упражнение. Чисто академические упражнения.Как мне изменить поля структуры при доступе через общий пакет ptr?
#[feature(managed_boxes)];
struct Monster {
legs: int
}
fn main() {
let mut steve = @Monster{ legs: 2 };
steve.legs = 8;
}
Я немного удивлен, получаю эту ошибку компилятора:
shared_box.rs:10:5: 10:15 error: cannot assign to immutable field
shared_box.rs:10 steve.legs = 8;
Что дает?
Ошибка исчезнет, если я переключусь на указатель Owned Box. Это какое-то ограничение на доступ к управляемому указателю?
Хорошо, что это подтвердилось, спасибо! –
@GregMalcolm Чтобы быть ясным, * содержимое * '@' является неизменным слотом, то есть 'x' в' y = @ x' не может быть изменено, даже если 'y' является' mut'. Такие типы, как 'RefCell' и' Cell', предлагают «внутреннюю изменчивость» ('RefCell' поставляется с проверками времени выполнения, чтобы гарантировать, что никакие инварианты указателей' & mut' не будут нарушены: если указатель '& mut' существует для части данных, тогда это единственный путь, по которому эти данные могут быть затронуты. Поддержание этого инварианта - это * почему * содержимое разделяемых типов по умолчанию неизменно.) – huon