我不确定您遇到了什么问题,但这里有一些建议。首先,我建议转移到 Rust 主干 -class
您使用的语法表明 Rust 的版本相当旧。在树干上,mut
不再是拥有类型内部的有效修饰符,意味着~mut T
无法写入,也不struct { mut field: T }
. 相反,拥有类型的可变性是通过其在堆栈中的根来继承的。因此,如果您有type Foo = ~[~str]
,则该类型在声明时是非常不可变的,let foo = ~[~"bar"]
而在 时是非常可变的let mut foo = ~[~"bar"]
。
这是一个基于您的类型的示例。
struct Item {
attributes: ~[~str]
}
struct ItemList {
items: ~[ ~Item ]
}
fn read_item() -> ~Item {
~Item {
attributes: ~[~"puppies"]
}
}
fn load_item_list() -> ~ItemList {
~ItemList {
items: ~[read_item()]
}
}
fn main() {
let mut my_items = load_item_list();
my_items.items[0].attributes[0] = ~"kitties";
}
你可以看到这些类型根本没有提到可变性,但是因为我们将它们加载到一个可变槽 ( let mut my_items
) 中,所以内部向量中的值可以被改变。
这可能需要一些时间来适应,但 Rust 以这种方式处理内部可变性,以避免一些与借用指针相关的潜在混淆错误。
这种继承的可变性的例外是托管类型,它也可以是可变性的根源,如@mut T
.