rust-quiz:015-inference-of-number-type.rs

godme發表於2022-07-12
trait Trait {
    fn f(&self);
}

impl Trait for u32 {
    fn f(&self) {
        print!("1");
    }
}

impl<'a> Trait for &'a i32 {
    fn f(&self) {
        print!("2");
    }
}

fn main() {
    let x = &0;
    x.f();
}
  • 0
    如果沒有明確宣告的情況下,x的型別其實是&{integer}

  • 查詢
    方法查詢首先從T開始,如果找不到,然後查詢&T下的方法。

現在回過頭看一下,如果

let x = &0i32

列印的結果就一定會是2
但其中出現兩個問題

  • x的型別是&integer,還沒有足夠明確
  • 方法查詢優先T,然後再進行引用的查詢

因此,對於u32&'a i32,除了u32i32的區別。
更重要的是T&T的區別。

因為&integer型別的可變性,首先會進行T的查詢。
當發現變換&integer就可以進行匹配的時候,那integer的具體型別就到此為止。
所以,這裡具體匹配的是u32,列印1

1

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章