Ich stecke hier seit einiger Zeit fest und kann nicht herausfinden, wie man das Feld word
veränderbar macht. Kann mir bitte jemand das Problem hier aufzeigen?Wie kann dieses Feld veränderbar gemacht werden?
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)
}
Output
error: cannot assign to immutable field `person.name.word` --> main.rs:27:5 | 27 | person.name.word = String::from("Wurst"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Es ist nicht wandelbar, weil Sie ausdrücklich gesagt, dass es nicht wandelbar sein sollte. Gibt es einen Grund, warum du '& 'name mut Name' nicht einfach benutzen kannst? ** Edit **: Auch machen Sie keine Felder veränderbar; Ein Feld ist veränderbar oder nicht abhängig davon, wie Sie es erreichen, und in diesem Fall erreichen Sie es über 'Person.name', was ein unveränderlicher Zeiger ist. –