Я застрял здесь некоторое время и не могу понять, как сделать поле 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'? ** Редактировать **: также вы не изменяете поля; поле изменено или не зависит от того, как вы его достигаете, и в этом случае вы достигаете его через 'Person.name', который является неизменным указателем. –