Rust中Turbofish之函数后面双冒号(::)用法

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语法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值