首页 > 其他分享 >RUST基础:类型推导

RUST基础:类型推导

时间:2022-08-20 14:23:38浏览次数:82  
标签:推导 Rust 编译器 let vec 类型 RUST

Rust基础入门书籍推荐《深入浅出RUST》

Rust的类型推导功能是十分强大的。它不仅可以从变量声明的当前语句中获取信息进行推导,而且还能通过上下文信息进行推导

1 fn main() {
2     let elem = 5u8;//没有明确的标出变量的类型,但是通过字面的后缀,编译器知道elem的类型为u8
3     let mut vec = Vec::new();//创建一个动态数组,数组内包含的是什么元素类型可以不写
4     vec.push(elem);//当调用push函数时,通过elem变量的类型,编译器就可以推导出vec的实际类型是Vec<u8>
5     println!("{:?}",vec);
6 }

输出结果为5。

我们甚至还可以只写一部分类型,剩下的部分让编译器去推导,比如下面的这个程序,我们只知道players变量是Vec动态数组类型,但是里面包含什么元素类型并不清楚,可以在尖括号中用下划线来代替:

1 fn main() {
2     let player_scores = [
3         ("Jack",20),("Jane",23),("Jill",18),("John",19),
4     ];
5     //players是动态数组,内部成员的类型没有指定,交给编译器自动推导
6     let players : Vec<_> = player_scores.iter().map(|&(player,_score)|{player}).collect();
7 
8     println!("{:?}",players);
9 }

自动类型推导和“动态类型系统”是两码事。Rust依然是静态类型的。一个变量的类型必须在编译阶段确定,且无法更改,只是某些时候不需要在源码中显示写出来而已。这只是编译器给我们提供的一个辅助工具。

Rust是只允许“局部变量/全局变量”实现类型推导,而函数签名等场景下是不允许的,这是故意这样设计的。这是因为局部变量只有局部的影响,全局变量必须当场景初始化,而函数签名具有全局性影响。函数签名如果使用自动类型推导,可能导致某个调用的地方使用方式发生变化,它的参数、返回值类型就发生了变化,进而导致远处另一个地方的编译错误,这是设计者不希望看到的情况。

标签:推导,Rust,编译器,let,vec,类型,RUST
From: https://www.cnblogs.com/hdhx-lh/p/16607618.html

相关文章

  • C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
    作者:目录一、缘由二、使用向量类型2.1基本算法2.2使用大小固定的向量(如Vector4)2.2.1介绍2.2.2用Vector4编写浮点数组求和函数2.3使用大小与硬件相关的向量(如Vector......
  • 让人纠结的PG字段json类型
    PostgreSQL确实牛逼得很。PostgreSQL有个json数据类型。当你用json类型设定表的字段时,你用select语句相当爽。问题是当你使用中间件时如FireDAC等,进行数据保存时,就会出现......
  • linux各文件类型解压/压缩命令
    1、tar解压:tar-xvffilename.tar打包:tar-cvffilename.tarfilename2、gz解压:gunzipfilename.gzorgzip-dFileName.gz压缩:gzipFileName3......
  • Rust实战系列-Rust介绍
    “学习资料:rustinaction[1]1.Rust安装curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|shsource"$HOME/.cargo/env"2.helloworld创建hel......
  • 指数分布的分布函数和概率密度函数的推导,牢记指数分布的分布函数为1-e^(-λx)
    指数分布的分布函数和概率密度函数的推导,牢记指数分布的分布函数为1-e^(-λx)前言:重在记录,可能出错。之前推导出了泊松分布的概率公式——泊松分布概率公式的推导,现在推......
  • 元组类型
    元组(tuple)是表示有序不可变元素的集合,元素可以是任意类型,元组就是不可变的列表。元组的定义元组通过一对小括号进行定义,元素之间使用逗号隔开。>>>a=()#......
  • 可变与不可变类型
    python中的数据类型根据底层内存机制分为可变与不可变两种。id()内建函数id()返回值的内存地址。>>>a=1>>>id(a)4382612480这里的内存地址是解释器里转换成十进......
  • No module named 'setuptools_rust' 安装oss2报错
    今天在测试机器上安装oss2报错了:Nomodulenamed'setuptools_rust'经过查询后记录一下OSS2介绍官方文档:https://help.aliyun.com/document_detail/32027.html一句......
  • python数据类型---字典dict
    python数据类型---字典dict1.基本认识字典是Python里一种常用的数据类型,键值对,keyvalue对,它用于存放具有映射关系的数据。字典中的数据是无顺序的。。。。。。d={key......
  • Python数据类型
    在Python3中,有6种标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典),见表2-2。  Python3中支持3种不同的数值类型,包括int(整型......