Struct 如何使该字段可变?
我在这里呆了一段时间,不知道如何使字段Struct 如何使该字段可变?,struct,rust,mutability,Struct,Rust,Mutability,我在这里呆了一段时间,不知道如何使字段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>{
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)
}
通过将字段标记为可变引用:
pub struct Person<'name>{
name:&'name mut Name
} // ^^^ mutable
pub struct Person<'name>{
name:&'name mut Name
}
pub struct Person将字段标记为可变引用:
pub struct Person<'name>{
name:&'name mut Name
} // ^^^ mutable
pub struct Person<'name>{
name:&'name mut Name
}
pub-struct-Person查看您的Person
struct:
pub struct Person<'name>{
name:&'name Name
}
fn new(name: &'name mut Name)
()看着你的人
结构:
pub struct Person<'name>{
name:&'name Name
}
fn new(name: &'name mut Name)
()我想您希望person.name
是可变的,因为您为person
实现了new()
方法,其中name
参数是对name
结构的可变引用:
pub struct Person<'name>{
name:&'name Name
}
fn new(name: &'name mut Name)
但这只意味着函数参数必须是一个-这不会导致目标人员的字段可以发生变异。您可以将可变引用传递给期望不可变引用的目标,但不能反过来传递;您将得到一个值在可变性上不同的错误
正如其他人正确指出的,该字段需要明确标记为mut
able,以允许其可变性:
struct Person<'name>{
name: &'name mut Name
}
struct Person我想您希望Person.name
是可变的,因为您为Person
实现了new()
方法,其中name
参数是对name
结构的可变引用:
pub struct Person<'name>{
name:&'name Name
}
fn new(name: &'name mut Name)
但这只意味着函数参数必须是一个-这不会导致目标人员的字段可以发生变异。您可以将可变引用传递给期望不可变引用的目标,但不能反过来传递;您将得到一个值在可变性上不同的错误
正如其他人正确指出的,该字段需要明确标记为mut
able,以允许其可变性:
struct Person<'name>{
name: &'name mut Name
}
struct PersonIt是不可变的,因为您特别说过它不应该是可变的。有什么原因不能只使用&'name mut name
?编辑:此外,您不使字段可变;字段是可变的还是不可变的取决于您如何访问它,在本例中,您可以通过Person.name
访问它,这是一个不可变的指针。它是不可变的,因为您明确说过它不应该是可变的。有什么原因不能只使用&'name mut name
?编辑:此外,您不使字段可变;字段是可变的还是不可变的取决于您如何访问它,在本例中,您可以通过Person.name
来访问它,这是一个不可变的指针。