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

qfe3c7zg  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(101)

我从byteorder中读取了以下语法:

rdr.read_u16::<BigEndian>()

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

z9gpfhce

z9gpfhce1#

这种结构被称为turbofish。如果你搜索这个语句,你会发现它的定义和用法。
虽然第一版的《The Rust Programming Language》已经过时了,但我觉得this particular section比第二本书更好。
引用第二版:
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语法指定了类型参数。
c可以工作,因为我们直接指定了c的类型。

相关问题