如果我没有指定数字的类型,为什么count_ones不起作用?

时间:2018-02-26 14:40:51

标签: methods rust integer

为什么我需要为数字明确声明类型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 个答案:

答案 0 :(得分:6)

方法count_ones不是由整数类型共享的特征提供的 - 它是针对每个类型单独实现的。这意味着您需要指定类型,以使该方法适用于您要使用它的数字 - 编译器需要知道要使用哪种类型的实现。

此外,如果您想知道为什么在这种情况下编译器不知道没有指定类型的let x = 5;应该分配i32(默认的整数类型)并使用它的{{1}实现1}},它还不是编译阶段 - 在解析方法和函数名称后分配默认类型。