我刚开始学习 Rust,正在了解该语言的可变性规则。我试图弄清楚结构体、对象和数组是否是深度不可变的。
所以我有这个结构体:
struct Foo {
bar: String,
}
我希望能够了解关于深层可变性的规则。在创建结构体时,必须将其定义为mut
,才能对其属性进行更改。
let mut f = Foo{
bar: String::from("hello")
};
f.bar = String::from("foo"); // Must be mut to change a property
println!("{:?}", f.bar);
然而,当我定义一个不可变结构体并将其移入可变向量中时,该结构体就变成了可变的。
let f = Foo{
bar: String::from("hello")
};
let mut strings: Vec<Foo> = vec![f];
strings[0].bar = String::from("foo");
println!("{:?}", strings[0].bar);
我猜测 f
被复制到了可变向量中(并从其作用域中删除了?),然后将该副本重新分配为可变的,但我并不确定。
我能否获得一些关于发生了什么的见解?
&mut
允许对变量进行临时可变访问,原始变量必须标记为mut
才能有资格进行多个借用,是吗? - David Alsh