为什么我需要为数字明确声明类型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
。为什么不这样做?
答案 0 :(得分:6)
方法count_ones
不是由整数类型共享的特征提供的 - 它是针对每个类型单独实现的。这意味着您需要指定类型,以使该方法适用于您要使用它的数字 - 编译器需要知道要使用哪种类型的实现。
此外,如果您想知道为什么在这种情况下编译器不知道没有指定类型的let x = 5;
应该分配i32
(默认的整数类型)并使用它的{{1}实现1}},它还不是编译阶段 - 在解析方法和函数名称后分配默认类型。