我正在学习铁 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
}
我正在学习铁 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
}
Rust区分在impl
块上定义的方法和与 struct 相关联的字段.S
struct 中的f
与全名为S::f
的方法之间有no个关系,而该方法恰好带有一个&self
参数.
s.f(); // Prints 1
这是语法Suite for
S::f(&s); // Prints 1
它确实会像Python一样查看对象的字段.当您有一个后跟方法调用语法(即点、名称和左括号)的表达式时,这始终是方法调用.方法调用是静态解析的,运行库将其视为普通函数调用.s.f()
也可以指在某个特性上定义的方法,如果它没有在您的固有impl
中定义的话.
要调用恰好存储在实例变量中的函数,请使用额外的圆括号.
(s.f)(); // Prints 2
这是not次方法调用.这是一个字段访问,然后调用结果字段,在本例中恰好是一个函数.