首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >论铁锈沉降器

论铁锈沉降器
EN

Stack Overflow用户
提问于 2019-03-01 11:46:14
回答 1查看 442关注 0票数 -2

我在Stack Overflow上寻找在声明的可变结构中设置值的方法。答案看起来并不简单,对我来说,离我喜欢的简单太远了。我最终通过修改发现这段代码可以正常工作:

代码语言:javascript
复制
struct FooStruct {
    bar: i32,
}

impl FooStruct {

    fn set(&mut self, val: i32){
        //*self.first_name_mut() = val;
        *(&mut self.bar) = val;
    }

}

fn main() {
    let mut k = 45;
    let mut my_person = FooStruct { bar: 2};

    println!("Fn: {}", my_person.bar);
    my_person.set(k);
    println!("Fn: {}", my_person.bar); //value is printed as 45
    k = 33; // set k-value
    println!("Fn: {}", my_person.bar); //the value in the struct remains as 45, unchanged
}

请注意,实现setter是多么简单:

代码语言:javascript
复制
*(&mut self.bar) = val;

我的问题是:这种简单的设置值是否有陷阱?人们已经创建了用于获取/设置的宏,所以我想知道为什么不使用这种方法。我来自Java-land,在那里设置是一件不需要动脑筋的事情(this.value = input);在到达rustaceans居住的地方时,我认为类似OOP的功能实现起来会很麻烦。

虽然我希望这篇文章能帮助人们实现setter,但我也希望有经验的用户来解释上面这行代码是做什么的,以及我还没有(可能还)看到的任何陷阱。

EN

回答 1

Stack Overflow用户

发布于 2019-03-01 12:07:07

可变性是从父对象继承的,在本例中是"my_person",因为它被声明为"mut“。因此,正如本杰明·林德利所指出的,你所要做的就是替换:

代码语言:javascript
复制
*(&mut self.bar) = val;

通过以下方式:

代码语言:javascript
复制
self.bar = val;

教训:如果对象被声明为可变的,那么可变性就会从父对象向下传播到结构中

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54937650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档