Rust的类型推导功能是比较强大的
它不仅可以从变量声明的当前语句中获取信息进行推导
而且还能通过上下文信息进行推导
fn test() {
let value = 5u8;
println!("{}",value);
let mut vec = Vec::new();
vec.push(value);
println!("{}",value);
}
let value = 5u8;
这条语句没有明确标出变量的类型
但是通过字面量的后缀
编译器知道value的类型为u8
let mut vec = Vec::new();
创建一个动态数组
数组内包含的是什么元素类型可以不写
到后面调用了push函数
通过value变量的类型
编译器可以推导出vec的实际类型是Vec<u8>
自动类型推导和动态类型系统是两码事
rust依然是静态类型的
一个变量的类型必须在编译阶段确定
且无法更改
只是某些时候不需要在源码中显式写出来而已
这只是编译器给我们提供的一个辅助工具
rust只允许局部变量/全局变量实现类型推导
而函数签名等场景下是不允许的
这是故意这样设计的
这是因为局部变量只有局部的影响
全局变量必须当场初始化
而函数签名具有全局性影响
函数签名如果使用自动类型推导
可能导致某个调用的地方使用方式发生变化
它的参数及返回值类型就发生了变化
进而导致远处另一个地方的编译错误
这是设计者不希望看到的地方
enjoy