语法是什么:`instance.method :: <something>()`?

时间:2018-09-17 03:43:25

标签: rust

我从byteorder阅读了以下语法:

rdr.read_u16::<BigEndian>()

我找不到任何解释语法instance.method::<SomeThing>()的文档

1 个答案:

答案 0 :(得分:14)

此构造称为turbofish。如果搜索此语句,您将发现它的定义和用法。

尽管 Rust编程语言的第一版已经过时,但我认为this particular sectionsecond book更好。

引用第二版:

  

path::<...>method::<...>
  指定表达式中泛型类型,函数或方法的参数;通常称为turbofish(例如"42".parse::<i32>()

您可以在编译器无法推断出类型参数的任何情况下使用它,例如

fn main () {
    let a = (0..255).sum();
    let b = (0..255).sum::<u32>();
    let c: u32 = (0..255).sum();
}

a不起作用,因为它不能推断出变量类型。
b之所以起作用,是因为我们直接用turbofish语法指定了type参数。
c确实有效,因为我们直接指定了c的类型。