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语法
Rust中Turbofish之函数后面双冒号(::)用法相关推荐
- java函数参数使用冒号_java8中:: 用法示例(JDK8双冒号用法)
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 代码其实很简单: 以前的代码一般是如此的: public class Accep ...
- JDK8 双冒号用法
java8 :: 用法 (JDK8 双冒号用法) 特性 jdk8中使用了::的用法.就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下,双冒号运算就是Java中 ...
- ES6 浅谈箭头函数,双冒号符号
1.箭头函数 ES6 允许使用"箭头"(=>)定义函数. var cat= function (name) { return "tom";}; va ...
- mysql 双冒号_jdk8新特性之双冒号 :: 用法及详解
jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法. 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function.比如: Function ...
- java8 :: 用法 (JDK8 双冒号用法)
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 代码其实很简单: 以前的代码一般是如此的: public class Accep ...
- java双冒号_jdk8新特性之双冒号 :: 用法及详解
jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法. 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function.比如: Function ...
- 关于冒号和双冒号用法
1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; X ...
- java 双冒号用法
JDK8中有双冒号的用法,形如Class::methodname,符号左边是调用方法所处的类名,符号右边是调用的静态方法.简单的说,就是逐一传入参数值到某个类的静态方法并调用该静态方法. 以前的方式 ...
- java8学习之双冒号用法
用法说明 JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下. 类名::方法名 使用示例 person -> person.ge ...
最新文章
- 奶牛排序 cow sort 置换群
- 有重复元素的排列问题pascal题解
- Shell脚本中函数的定义和调用笔记
- 补习系列(12)-springboot 与邮件发送
- Linux命令行(console)屏幕分辨率调整
- Ubuntu常用命令大全
- 华为认证IE太难,先考IP好找工作吗?
- ubuntu设置宽带连接及wifi共享
- 函数最值题目及答案_公务员考试行测技巧:巧解一元二次函数最值问题
- 大曝光:淘宝店卖论文,10年卖100多篇SCI获利300万!
- 基于FPGA的万年历
- pytorch dataset自定义_PyTorch | 数据加载及预处理教程
- #pragma DATA_SECTION的使用
- 奥迪q5计算机控制显示,奥迪q5仪表盘功能图解,奥迪q5仪表盘怎么切换
- 电子邮箱的工作原理以及SMTP、POP3、IMAP之间的联系和区别
- vue 路由懒加载,使用 import 无法处理
- 计算机软件的层次结构图,用Word2007制作出精美的层次结构图
- 计算机C语言二级发证机构,全国高等学校计算机等级考试(壹级)证书的发证机关是哪个...
- 首席新媒体黎想教程:数据活动运营方法,就这么简单!
- 给定一个二叉树的根节点 root ,返回它的 中序 遍历。【LeetCode Hot 100】
热门文章
- python网页提交表单_用Python的urllib库提交WEB表单
- “一休数学思维”改名“海豚思维”,并完成数千万元Pre-A轮融资
- 对于国产芯片何时能挑大梁
- 欧盟批准ATT收购时代华纳 或年底前完成交易
- Use grep to report back only line numbers
- [转]RegOpenKeyEx函数失败的问题
- 复习一下,免得下次面试又栽在沟里~
- 有些文档,本来想整理整理贴出来,
- 【BZOJ4774】修路 [斯坦纳树]
- 数据分析的 7 个关键步骤