Rust中的::语法(见here)是什么意思:

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

在Haskell这样的语言中,它意味着类型提示,但在这里,编译器已经有了该值类型的注释,所以它似乎是类型转换.

推荐答案

请复习The Rust Programming Language中的Appendix B: Operators and Symbols.


在这种情况下,双冒号(::)是路径分隔符.Pathscratesmodulesitems组成.

your example item, updated for 1.0的完整路径是:

std::usize::BITS

这里,std是一个 crate ,usize是一个模块,BITS是一个特定的项目-在这种情况下是一个常数.

如果你在文件中向上滚动,你会看到use core::usize.use将路径添加到要查找的项目集.这就是你只说usize::BITS就可以逃脱的方法.core crate 是std crate 外立面的一个实现细节,所以在普通代码中,您可以用std代替core.


::还可用作指定泛型类型的一种方法,如果不能以其他方式推断泛型类型;这被称为turbofish.

另见:

Rust相关问答推荐

如何从Rust记录WASM堆内存使用情况?

为什么std repeat trait绑定在impl块和关联函数之间?

什么时候铁 rust FFI边界上的panic 是未定义的行为?

定义采用更高级类型泛型的性状

替换可变引用中的字符串会泄漏内存吗?

Rust&;Tokio:如何处理更多的信号,而不仅仅是SIGINT,即SIGQUE?

有没有可能让泛型Rust T总是堆分配的?

在运行特定测试时,如何 suppress cargo test 的空输出?

Rust面向对象设计模式

如何执行数组文字的编译时串联?

如何以与平台无关的方式将OsString转换为utf-8编码的字符串?

tokio::spawn 有和没有异步块

Rust 1.70 中未找到 Trait 实现

如何将 &[T] 或 Vec<T> 转换为 Arc<Mutex<[T]>>?

如何使用泛型满足 tokio 异步任务中的生命周期界限

为什么我可以同时传递可变和不可变引用?

当我不满足特征界限时会发生什么?

为什么基于 clap::Parser 读取的大量数字进行计算比硬编码该数字时慢?

用逗号分隔字符串,但在标记中使用逗号

为什么-x试图解析为文字并在声明性宏中失败?