小编Arn*_*e J的帖子

与可变借贷绑定的不可变借贷导致“一次不能多次借用* self可变”

我正在通过锻炼来学习Rust。在此文件中,目标是像在电子表格中一样更新单元格:当值更改时,必须重新计算从该单元格派生的所有单元格。在这里,这些被称为该单元的父母。

更新单元格的值证明没有问题,但是更新父母会使我与借贷检查器发生冲突。从a检索单元格HashMap并更新值后,我不再需要可变的引用-因此我尝试将其包装在不可变的引用中。这样,我只需要找到一次即可。

但是似乎Rust的数字是因为我最初从借来的书中得到了我一成不变的参考&mut self,所以它仍然必须与之绑定。显然,这使我无法再次使用self

use std::collections::HashMap;
use std::vec::Vec;

struct Cell {
    value: i32,
    parents: Vec<u32>,
}

pub struct Sheet {
    table: HashMap<u32, Cell>,
}

impl Sheet {
    pub fn set_value(&mut self, identifier: u32, new_value: i32) {
        let mut updated_cell: Option<&Cell> = None;
        if let Some(cell) = self.table.get_mut(&identifier) {
            let Cell { value, .. } = cell;
            *value = new_value;
            updated_cell = Some(cell);
        }
        if let Some(cell) = updated_cell {
            recalculate(self, &cell.parents);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

mutability rust borrow-checker

9
推荐指数
1
解决办法
182
查看次数

标签 统计

borrow-checker ×1

mutability ×1

rust ×1