What is the syntax: `instance.method::(

2020-01-28 09:24发布

I read the below syntax from byteorder:

rdr.read_u16::<BigEndian>()

I can't find any documentation which explains the syntax instance.method::<SomeThing>()

标签: rust
1条回答
Lonely孤独者°
2楼-- · 2020-01-28 10:18

This construct is called turbofish. If you search for this statement, you will discover its definition and its usage.

Although the first edition of The Rust Programming Language is outdated, I feel that this particular section is better than in the second book.

Quoting the second edition:

path::<...>, method::<...>
Specifies parameters to generic type, function, or method in an expression; often referred to as turbofish (e.g., "42".parse::<i32>())

You can use it in any kind of situation where the compiler is not able to deduce the type parameter, e.g.

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

a does not work because it cannot deduce the variable type.
b does work because we specify the type parameter directly with the turbofish syntax.
c does work because we specify the type of c directly.

查看更多
登录 后发表回答