Rust 重写函数参数

mas*_*cai 5 rust

我正在学习 Rust。并调查例子。为什么代码输出1?我的代码:

struct S {
    f: fn(),
}

impl S {
    fn f(&self) {
        print!("1");
    }
}


fn main() {
    let f2 = || print!("2");
    let s = S{f: f2};
    s.f(); // prints 1, but I expected 2

}


Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 14

Rust 区分块上定义的方法impl和与结构关联的字段。结构体中的和全名恰好带有参数的方法之间没有任何关系。fSS::f&self

s.f(); // Prints 1
Run Code Online (Sandbox Code Playgroud)

这是语法糖

S::f(&s); // Prints 1
Run Code Online (Sandbox Code Playgroud)

不像Python 那样查看对象的字段。当表达式后跟方法调用语法(即点、名称和左括号)时,这始终是方法调用。方法调用静态解析,并被运行时视为普通函数调用。s.f()还可以引用在某处的特征上定义的方法,如果它没有在您固有的impl.

要调用恰好存储在实例变量中的函数,请使用额外的括号。

(s.f)(); // Prints 2
Run Code Online (Sandbox Code Playgroud)

这不是方法调用。这是一个字段访问,然后调用结果字段,在本例中恰好是一个函数。