Rust 借用自我作为易变的,不可能成为自我的一员?
错误:Rust 借用自我作为易变的,不可能成为自我的一员?,rust,Rust,错误: struct State { x: i32 } trait A { fn a(&mut self, b: &i32); } impl A for State { fn a(&mut self, b: &i32) { } } fn main() { let mut a = State{x: 0}; a.a(&a.x); } 看起来这个错误是关于借用self的,但是我只借用了se
struct State {
x: i32
}
trait A {
fn a(&mut self, b: &i32);
}
impl A for State {
fn a(&mut self, b: &i32) {
}
}
fn main() {
let mut a = State{x: 0};
a.a(&a.x);
}
看起来这个错误是关于借用self的,但是我只借用了self一次,第二个b应该是结构的一个成员的借用
当我借用结构的一个成员时,Rust是否完全借用了结构 我读了一遍,但它说只要不是一个切片,就可以借用结构的一个元素。当调用a::a方法时,它借用了为其实现的整个变量。因此,不能同时对同一对象或其内容进行不可变的引用 结构状态{ x:i32, y:i32, } 特征A{ fn a&mut self,b:&i32;//始终借用整个“self” } 为国家祈祷{ fn a和mut self,b:&i32{ /考虑下一个代码 self.x*=2+*b; //如果将“b”作为“&a.x”提供,则不清楚应该是什么结果 }//总是借用一个完整的“自我” } fn swapfirst:&mut i32,second:&mut i32{}//只提供'i32's fn干线{ 设muta=State{x:0,y:0}; //a.a&a.x;//你不能,只要a.a借用整个“州” 交换&mut a.x,&mut a.y;//但如果部分是分开的,则可以部分借用 } 当您调用A::A方法时,它借用了为其实现的整个变量。因此,不能同时对同一对象或其内容进行不可变的引用 结构状态{ x:i32, y:i32, } 特征A{ fn a&mut self,b:&i32;//始终借用整个“self” } 为国家祈祷{ fn a和mut self,b:&i32{ /考虑下一个代码 self.x*=2+*b; //如果将“b”作为“&a.x”提供,则不清楚应该是什么结果 }//总是借用一个完整的“自我” } fn swapfirst:&mut i32,second:&mut i32{}//只提供'i32's fn干线{ 设muta=State{x:0,y:0}; //a.a&a.x;//你不能,只要a.a借用整个“州” 交换&mut a.x,&mut a.y;//但如果部分是分开的,则可以部分借用 }
当我借用结构的一个成员时,Rust是否完全借用了结构?对这意味着a方法可以假设得到一个对x的可变引用,这将别名使用&a.x创建的引用。可以同时借用&mut a.y和&a.x,因此&a.x只借用a的一部分,&mut a.y另一部分,&mut a.a整个结构。冲突源于&a.x和&mut a重叠。所以正确的答案不是肯定的,但你的解释没有错。当我借用struct的一个成员时,Rust是否完全借用了struct?对这意味着a方法可以假设得到一个对x的可变引用,这将别名使用&a.x创建的引用。可以同时借用&mut a.y和&a.x,因此&a.x只借用a的一部分,&mut a.y另一部分,&mut a.a整个结构。冲突源于&a.x和&mut a重叠。所以正确的答案不是肯定的,但你的解释没有错。
error[E0502]: cannot borrow `a` as mutable because it is also borrowed as immutable
--> src/main.rs:17:5
|
17 | a.a(&a.x);
| ^^-^----^
| | | |
| | | immutable borrow occurs here
| | immutable borrow later used by call
| mutable borrow occurs here