rust 如何根据另一个函数修改结构的值?

9gm1akwq  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(154)

我有一个结构体,其中包含一个f32的Vec:

struct MyStruct(Vec<f32>);

我想在MyStruct上实现两个函数:
1.一个返回f32但 * 需要 * 借用self的函数
1.另一个函数,它根据第一个函数返回的值更改存储的f32。

impl MyStruct {
    fn hello(&self) -> f32 {
        0.0  // Just for the example, but the function needs to borrow &self
    }
    
    fn problem(&mut self) {
        for number in &mut self.0 {
            *number = self.hello();
        }
    }
}

我的目标是将MyStruct中的Vec中的f32更改为hello返回的值。
但是,借用检查器告诉我:

cannot borrow `*self` as immutable because it is also borrowed as mutable
for number in &mut self.0 {
-----------
|
mutable borrow occurs here
mutable borrow later used here
*number = self.hello();
^^^^^^^^^^^^ immutable borrow occurs here

我期待着它,但我没有看到任何其他方法来做到这一点。
我试着不使用借用或可变变量,但它不起作用。任何帮助将不胜感激:)

ui7jx7zq

ui7jx7zq1#

从注解中可以看出,解决方案是每次索引Vec:

struct MyStruct(Vec<f32>);

impl MyStruct {
    fn hello(&self) -> f32 {
        // Something that uses `self`
        self.0.iter().sum()
    }
    
    fn problem(&mut self) {
        for index in 0..self.0.len() {
            self.0[index] = self.hello();
        }
    }
}

相关问题