什么允许在调用方法时从结构隐式转换为其引用



哪个规则使以下代码起作用?

struct Dummy(i32);
impl Dummy {
    pub fn borrow(&self) {
        println!("{}", self.0);
    }
}
fn main() {
    let d = Dummy(1);
    (&d).borrow();
    d.borrow();
}

我希望d.borrow()不起作用,因为它传入与方法签名borrow(&self)不匹配的self

来自参考:

方法调用由一个表达式(接收器)后跟 单点、表达式路径段和括号 表达式列表

查找方法调用时,接收方可能会自动 取消引用或借用以调用方法。


注意:

自动取消引用或借用仅对接收机有效。如果没有表达式作为接收器,它将不起作用。编译器需要借用的类型。

例:

fn main() {
    let d = Dummy(1);
    let borrowed = Dummy::borrow(d);
}

编译器将显示错误:

error[E0308]: mismatched types
  --> src/main.rs:12:34
   |
12 |     let borrowed = Dummy::borrow(d);
   |                                  ^
   |                                  |
   |                                  expected &Dummy, found struct `Dummy`
   |                                  help: consider borrowing here: `&d`
   |
   = note: expected type `&Dummy`
              found type `Dummy`

相关内容

  • 没有找到相关文章

最新更新