哪个规则使以下代码起作用?
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`