在Rust中,像这里看到的::
语法是什么意思:
fn chunk(n: uint, idx: uint) -> uint {
let sh = uint::BITS - (SHIFT * (idx + 1));
(n >> sh) & MASK
}
在像Haskell这样的语言中,它表示类型提示,但在这里编译器已经对该值的类型进行了注释,因此似乎很可能是类型转换。
在Rust中,像这里看到的::
语法是什么意思:
fn chunk(n: uint, idx: uint) -> uint {
let sh = uint::BITS - (SHIFT * (idx + 1));
(n >> sh) & MASK
}
在像Haskell这样的语言中,它表示类型提示,但在这里编译器已经对该值的类型进行了注释,因此似乎很可能是类型转换。
::
) 是路径分隔符。路径 由 crate、module 和 item 组成。
你的示例项目,在1.0中更新后 的完整路径为:std::usize::BITS
std
是一个 crate(包),usize
是一个模块,BITS
是一个具体的项 —— 在本例中是一个常量。use core::usize
。 use
将路径添加到要查找的项集合中。这就是你可以仅仅使用 usize::BITS
的原因。 core
包是 std
包外观的实现细节,因此在正常代码中可以将 core
替换为 std
。
::
也可以用作指定泛型类型的一种方式,当它们无法被推断时;这被称为turbofish。
另请参阅:
rlua::Table
的set
方法的文档似乎不符合这个定义。他们在那里创建了一个变量lua
,然后执行lua.exec::<()>(r#"…"#, None)
。::
看起来不像你的例子中的路径。 - Hi-Angel::<Type>
语法用于提供Type
参数。这就像C++/C#/Java的模板,只是由于某种原因有一个多余的双冒号。 - Hi-Angel::
(路径分隔符和Turbofish)这两种用法有关联吗? - joel抱歉,我没有认真阅读。在这种情况下,它只是指模块下的任何内容的常规方式。uint :: BITS
似乎是一个常量。