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

后端 未结 1 1536
清歌不尽
清歌不尽 2020-11-28 13:01

I read the below syntax from byteorder:

rdr.read_u16::()

I can\'t find any documentation which explains the syntax i

相关标签:
1条回答
  • 2020-11-28 13:44

    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.

    0 讨论(0)
提交回复
热议问题