Rust中的::语法是什么意思

fn chunk(n: uint, idx: uint) -> uint {
    let sh = uint::BITS - (SHIFT * (idx + 1));
    (n >> sh) & MASK
}

在像Haskell这样的语言中,它意味着一个类型提示,但是在这里编译器已经有了一个该值类型的注释,所以看起来它很可能是类型转换。

最佳答案

请查看Rust编程语言的Appendix B: Operators and Symbols
在本例中,双冒号(::)是路径分隔符。Paths由板条箱、模块和物品组成。
your example item, updated for 1.0的完整路径是:

std::usize::BITS

这里,std是一个板条箱,usize是一个模块,BITS是一个特定的项目-在本例中是一个常数。
如果在文件中向上滚动,您将看到use core::usizeuse将路径添加到要查找的项集。这就是你只需说usize::BITS就可以逃脱的方法。core板条箱是façade的一个实现细节,即std板条箱,因此您可以在正常代码中用std替换core
::还可以用作指定泛型类型的方法,否则无法推断泛型类型;这称为turbofish
另见:
What is the syntax: `instance.method::<SomeThing>()`?

07-27 19:19