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
来访问它,这是一个不可变的指针。