trait Trait: Sized {
fn is_reference(self) -> bool;
}
impl<'a, T> Trait for &'a T {
fn is_reference(self) -> bool {
true
}
}
fn main() {
match 0.is_reference() {
true => print!("1"),
false => print!("0"),
}
match '?'.is_reference() {
true => print!("1"),
false => {
impl Trait for char {
fn is_reference(self) -> bool {
false
}
}
print!("0")
}
}
}
方法查詢
對於T
,首先查詢T
下面的方法,如果找不到,會查詢&T
的方法。impl
對於impl
,不存在所謂的域的作用,只有條件編譯。
不論放在哪裡,它都會經過編譯。
針對第一個match
,&0
被查出了方法,所以匹配上了true
。
這次列印1
。
對於第二段match
,主要是impl
的生效時機。
因為載入並不在於程式碼所在的域,因此對於char
,該方法會返回false
。
所以,列印0
。
10
本作品採用《CC 協議》,轉載必須註明作者和本文連結