作者:天蝎樱花西街1992 | 来源:互联网 | 2022-12-26 15:07
为什么我需要显式声明i32
一个数字的类型才能使用count_ones
它?
fn main() {
let x: i32 = 5;
println!("{}", x.count_ones());
}
如果我写了let x = 5;
我会得到一个错误no method named 'count_ones' found for type '{integer}' in the current scope
.为什么不这样做?
1> ljedrz..:
count_ones
整数类型之间共享的特征不提供该方法- 它是针对每个类型单独实现的.这意味着您需要指定类型,以使该方法适用于您要使用它的数字 - 编译器需要知道要使用哪种类型的实现.
另外,如果你想知道为什么在这种情况下编译器不知道let x = 5;
没有指定的类型应该分配i32
(默认的整数类型)并使用它的实现count_ones
,它只是不是那个编译阶段 - 默认类型被分配解决方法和函数名称后.