あなたがどのような問題を抱えているのかはわかりませんが、ここにいくつかの指針があります。まず、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
。