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

题目

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!