rust-quiz:018-method-or-function-pointer.rs
题目
struct S {
f: fn(),
}
impl S {
fn f(&self) {
print!("1");
}
}
fn main() {
let print2 = || print!("2");
S { f: print2 }.f();
}
关键
方法检索
T->Trait->&T->&Trait属性检索
T->*T混合检索
想提取属性或者方法,需要明确的声明。
如果想要的是方法的话,可以直接声明调用,或者方法赋值。
如果想要的是属性的话,尤其是Fn,需要明确的指明是属性,然后进行调用。
题解
这里存在两种f:属性和方法。
调用的形式是S { f: print2 }.f();,主要判断的就是提取出来的是什么。
如果是直接的T.f(),毫无疑问,一定是方法调用。
因为.分隔了两部分,也没有明确需要先获取f。
因此打印的是1。
如果想要先获取属性f,需要进行特殊的说明。
(S { f: print2 }.f)();
答案
1
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: