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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!