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

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

  1. java函数参数使用冒号_java8中:: 用法示例(JDK8双冒号用法)

    JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 代码其实很简单: 以前的代码一般是如此的: public class Accep ...

  2. JDK8 双冒号用法

    java8 :: 用法 (JDK8 双冒号用法) 特性 jdk8中使用了::的用法.就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下,双冒号运算就是Java中 ...

  3. ES6 浅谈箭头函数,双冒号符号

    1.箭头函数 ES6 允许使用"箭头"(=>)定义函数. var cat= function (name) { return "tom";};    va ...

  4. mysql 双冒号_jdk8新特性之双冒号 :: 用法及详解

    jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法. 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function.比如: Function  ...

  5. java8 :: 用法 (JDK8 双冒号用法)

    JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 代码其实很简单: 以前的代码一般是如此的: public class Accep ...

  6. java双冒号_jdk8新特性之双冒号 :: 用法及详解

    jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法. 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function.比如: Function ...

  7. 关于冒号和双冒号用法

    1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; X ...

  8. java 双冒号用法

    JDK8中有双冒号的用法,形如Class::methodname,符号左边是调用方法所处的类名,符号右边是调用的静态方法.简单的说,就是逐一传入参数值到某个类的静态方法并调用该静态方法. 以前的方式 ...

  9. java8学习之双冒号用法

    用法说明 JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 类名::方法名 使用示例 person -> person.ge ...

最新文章

  1. 奶牛排序 cow sort 置换群
  2. 有重复元素的排列问题pascal题解
  3. Shell脚本中函数的定义和调用笔记
  4. 补习系列(12)-springboot 与邮件发送
  5. Linux命令行(console)屏幕分辨率调整
  6. Ubuntu常用命令大全
  7. 华为认证IE太难,先考IP好找工作吗?
  8. ubuntu设置宽带连接及wifi共享
  9. 函数最值题目及答案_公务员考试行测技巧:巧解一元二次函数最值问题
  10. 大曝光:淘宝店卖论文,10年卖100多篇SCI获利300万!
  11. 基于FPGA的万年历
  12. pytorch dataset自定义_PyTorch | 数据加载及预处理教程
  13. #pragma DATA_SECTION的使用
  14. 奥迪q5计算机控制显示,奥迪q5仪表盘功能图解,奥迪q5仪表盘怎么切换
  15. 电子邮箱的工作原理以及SMTP、POP3、IMAP之间的联系和区别
  16. vue 路由懒加载,使用 import 无法处理
  17. 计算机软件的层次结构图,用Word2007制作出精美的层次结构图
  18. 计算机C语言二级发证机构,全国高等学校计算机等级考试(壹级)证书的发证机关是哪个...
  19. 首席新媒体黎想教程:数据活动运营方法,就这么简单!
  20. 给定一个二叉树的根节点 root ,返回它的 中序 遍历。【LeetCode Hot 100】

热门文章

  1. python网页提交表单_用Python的urllib库提交WEB表单
  2. “一休数学思维”改名“海豚思维”,并完成数千万元Pre-A轮融资
  3. 对于国产芯片何时能挑大梁
  4. 欧盟批准ATT收购时代华纳 或年底前完成交易
  5. Use grep to report back only line numbers
  6. [转]RegOpenKeyEx函数失败的问题
  7. 复习一下,免得下次面试又栽在沟里~
  8. 有些文档,本来想整理整理贴出来,
  9. 【BZOJ4774】修路 [斯坦纳树]
  10. 数据分析的 7 个关键步骤