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 协议》,转载必须注明作者和本文链接
推荐文章: