RUST中的语法,Turbofish通常用于在表达式中为泛型类型、函数或方法指定参数。
1. Turbofish语法
大部分时候当涉及到泛型时,编译器可以自动推断出泛型参数:
// v must be a Vec<T> but we don't know what T is yet
let mut v = Vec::new();
// v just got a bool value, so T must be bool!
v.push(true);
// Debug-print v
println!("{:?}", v);
但是有的时候,编译器需要一些帮助。例如,如下如果省略最后一行的打印,会得到一个编译错误:
let v = Vec::new();
// ^^^^^^^^ cannot infer type for `T`
//
// note: type annotations or generic parameter binding required
println!("{:?}", v);
我们要么可以使用一个类型注解来解决它:
let v: Vec<bool> = Vec::new();
println!("{:?}", v);
要么通过一个叫做turbofish(::<>)
的语法来绑定泛型参数T:
let v = Vec::<bool>::new();
println!("{:?}", v);
2. 使用方法
需要为泛型函数,方法,结构或枚举指定具体类型的情况。
在类型定义中使用IDENT,而在表达式上下文中使用IDENT::来指定泛型参数的类型。
标准库里面的std::mem::size_of()函数使用方法如下:
pub const fn size_of<T>() -> usize
使用方法如下:
std::mem::size_of::<u8>(); //u8的字节数
std::mem::size_of::<u32>(); //u32的字节数
std::mem::size_of::<i32>(); //i32的字节数
参考:
The Rust Programming Language
Where to put the turbofish
RUST中的turbofish语法