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