1
因此,將共享框指針作爲學習練習。純粹的學術演習。如何通過共享框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;
是怎麼回事?
如果我切換到擁有框指針,錯誤消失。這是對託管指針訪問的某種限制嗎?
很高興有證實,謝謝! –
@GregMalcolm明確地說,'@'的*內容*是一個不可變的槽,也就是說,即使'y'是'mut','y = @ x'中的'x'也不能被修改。像'RefCell'和'Cell'這樣的類型提供了「內部可變性」('RefCell'帶有運行時檢查以確保沒有違反'&mut'指針的不變量:如果一個數據段存在'&mut'指針,那麼這是數據可以被觸及的唯一路徑。維持這種不變是*爲什麼*默認情況下共享類型的內容是不可變的。) – huon