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
,除了u32
和i32
的區別。
更重要的是T
和&T
的區別。
因為&integer
型別的可變性,首先會進行T
的查詢。
當發現變換&integer
就可以進行匹配的時候,那integer
的具體型別就到此為止。
所以,這裡具體匹配的是u32
,列印1
。
1
本作品採用《CC 協議》,轉載必須註明作者和本文連結