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 协议》,转载必须注明作者和本文链接