【问题标题】:What does :: mean in Rust?在 Rust 中 :: 是什么意思?
【发布时间】:2018-12-10 00:44:22
【问题描述】:

here 所示,Rust 中的 :: 语法是什么意思:

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

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

【问题讨论】:

  • 不是类标识符吗?见第 13-19 行
  • 当心!您正在链接到 非常旧版本的 Rust。你应该确保你阅读的所有内容都是 Rust 1.0 beta 或更高版本!
  • 是的,看起来 trie 实现从那时起就被删除了,这就是我找不到更新版本的原因。
  • crates that advertise他们实现了尝试。

标签: syntax rust


【解决方案1】:

请查看 Rust 编程语言Appendix B: Operators and Symbols


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

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

std::usize::BITS

这里,std 是 crate,usize 是一个模块,BITS 是特定项目——在本例中是一个常量。

如果您在文件中向上滚动,您会看到use core::usizeuse 将路径添加到要查看的项目集。这就是您只需说 usize::BITS 就可以逃脱的方式。 core crate 是外观的实现细节,即std crate,因此您可以在普通代码中将std 替换为core


:: 也可以用作指定泛型类型的一种方式,因为它们不能以其他方式被推断出来;这称为turbofish

另见:

【讨论】:

  • 第一个例子here, documentation for set metod of rlua::Table 似乎没有被这个定义所涵盖。他们在那里创建一个变量lua,然后执行lua.exec::<()>(r#"…"#, None):: 看起来不像您的示例中的路径。
  • 我在 IRC 上问过:原来,::<Type> 语法用于提供Type 参数。这就像 C++/C#/Java 模板,除了出于某种原因有一个多余的双冒号。
  • ::(路径分隔符和turbofish)的这两种用法有什么关系吗?
  • 那个turbofish网站很可爱......:P
【解决方案2】:

哎呀。我读的不是很清楚。在这种情况下,它只是引用模块下任何内容的正常方式。 uint::BITS 似乎是一个常数。

【讨论】:

    猜你喜欢
    • 2022-10-02
    • 2020-06-20
    • 2022-07-22
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2016-09-21
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多