私は今ここにいて、フィールドword
を変更可能にする方法を理解できません。誰かがここで問題を指摘してくれますか?このフィールドを変更可能にするにはどうすればよいですか?
pub struct Person<'name>{
name:&'name Name
}
pub struct Name{
word: String
}
impl<'name> Person<'name>{
pub fn new(name:&'name mut Name)-> Person<'name>{
Person {
name: name
}
}
}
fn main(){
let mut name: Name = Name {
word: String::from("Petre")
};
let mut person: Person = Person::new(&mut name);
first(&mut person);
}
pub fn first(person:&mut Person){
person.name.word = String::from("Wurst");
second(person);
}
pub fn second(person:&mut Person){
println!("{}",person.name.word)
}
可変基準としてフィールドをマークすることにより、出力
error: cannot assign to immutable field `person.name.word` --> main.rs:27:5 | 27 | person.name.word = String::from("Wurst"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
あなたは具体的には可変であってはならないと言ったので、それが変更可能ではありません。 '& 'name mut Name'を使うだけの理由はありますか? ** Edit **:フィールドを変更することもできません。フィールドはあなたがどのようにそれに到達するかに依存して変更可能であるかどうかは不明です。この場合、不変のポインタである 'Person.name'を介してフィールドに到達します。 –