我将尽力为您翻译以下内容,涉及编程相关内容:
有点勉强的例子,但是想法是
我猜编译器看到我们多次借用该结构体并停止了这个过程,但是如果整个结构体可变,这应该没问题吧?
一个解决方案是放弃结构体引用并借用需要改变的每个字段:
fn do_calc(result_add: &mut i32, result_subtract: &mut i32, var1: &mut i32, var2: &mut i32)
这样做可以起作用,但对于更复杂和奇怪的内容来说很繁琐。是否有其他方法在可变方式下借用结构体及其成员?
游乐场:原始 提到的解决方案
我正在尝试在函数调用中可变地借用一个结构体及其某些成员。由于第一个结构体的可变借用,任何后续的(成员)借用都会标记错误second mutable borrow occurs here
情景很简单,我们有一个保存状态的结构体:
struct State {
a: i32,
b: i32,
result_add: i32,
result_subtract: i32
}
并且需要一个函数,根据传递的成员(在我们的情况下为a
和b
),填充结构中result_add
和result_subtract
的计算结果。
fn do_calc(state : & mut State, var1 : &mut i32, var2: &mut i32) {
*var1 = 4;
*var2 = 2;
state.result_add = state.a + state.b;
state.result_subtract = state.a - state.b;
}
有点勉强的例子,但是想法是
var1
和var2
也可以是其他结构成员。现在我们调用:
do_calc(&mut state, &mut state.a, &mut state.b);
然后会出现错误:
error[E0499]: cannot borrow `state.a` as mutable more than once at a time
--> src/main.rs:24:25
|
24 | do_calc(&mut state, &mut state.a, &mut state.b);
| ------- ---------- ^^^^^^^^^^^^ second mutable borrow occurs here
| | |
| | first mutable borrow occurs here
| first borrow later used by call
我猜编译器看到我们多次借用该结构体并停止了这个过程,但是如果整个结构体可变,这应该没问题吧?
一个解决方案是放弃结构体引用并借用需要改变的每个字段:
fn do_calc(result_add: &mut i32, result_subtract: &mut i32, var1: &mut i32, var2: &mut i32)
这样做可以起作用,但对于更复杂和奇怪的内容来说很繁琐。是否有其他方法在可变方式下借用结构体及其成员?
游乐场:原始 提到的解决方案