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,除了u32和i32的区别。
更重要的是T和&T的区别。
因为&integer类型的可变性,首先会进行T的查找。
当发现变换&integer就可以进行匹配的时候,那integer的具体类型就到此为止。
所以,这里具体匹配的是u32,打印1。
答案
1
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu