rust-quiz:018-method-or-function-pointer.rs

godme發表於2022-07-14
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 協議》,轉載必須註明作者和本文連結

相關文章