在调用同一结构的成员函数时,按值传递struct成员变量

时间:2018-02-24 20:28:50

标签: rust

此Rust代码无法编译:

struct Foo {
    x: i32,
}

impl Foo {
    fn bar(&mut self, x: i32) {}

    fn foo(&mut self) {
        self.bar(self.x);
    }
}

由于此生命周期错误而失败:

error[E0503]: cannot use `self.x` because it was mutably borrowed
 --> src/main.rs:9:18
  |
9 |         self.bar(self.x);
  |         ----     ^^^^^^ use of borrowed `*self`
  |         |
  |         borrow of `*self` occurs here

我不明白为什么Rust编译器遇到上述代码的问题。 x按值传递,因此self被调用时,bar个成员变量中没有任何借位。该栏获得的selfself具有的foo相同,因为在函数调用期间会将成员变量的副本发送到bar

我没有看到代码违反Rust借用机制的任何合理原因。

0 个答案:

没有答案