rust-quiz:014-trait-autoref.rs

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

相關文章