Types 何时需要使用类型批注?

Types 何时需要使用类型批注?,types,rust,Types,Rust,在阅读Rust的书时,我注意到有时变量是用类型注释定义的,有时不是 什么时候应该使用类型注释 let tup: (i32, f64, u8) = (500, 6.4, 1); let tup = (500, 6.4, 1); let months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November

在阅读Rust的书时,我注意到有时变量是用类型注释定义的,有时不是

什么时候应该使用类型注释

let tup: (i32, f64, u8) = (500, 6.4, 1);

let tup = (500, 6.4, 1);

let months = ["January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"];

let a: [i32; 5] = [1, 2, 3, 4, 5];
当必须指定类型时 如果编译器无法自行推断类型,则必须指定该类型:

let number:Vec=(0..10).collect();
项目中也不能省略类型。特别是,
const
s和
static
s看起来非常像
let
语句,但必须指定类型:

常数PI_平方:i32=10;
//无效语法
常数半π=1.5;
无法指定类型时 当类型为匿名时,无法指定它

fn displaybable()->impl std::fmt::Display{
""
}
fn main(){
设foo=displaybable();
//无效语法:
让foo:impl std::fmt::Display=displaybable();
}
当可以指定类型,但不具有太多 但大多数情况下,类型可以指定,但不必指定:编译器可以根据使用情况推断它


在Rust中,通常认为在可能的情况下省略简单类型是很好的做法。然而,人们决定某件事情不再简单并决定是否必须指定它的界限是基于意见的,超出了StackOverflow的范围。

还值得注意的是,第一个元组是
(i32,f64,u8)
,而第二个元组是
(i32,f64,i32)
。整数的默认推断类型是
i32
。对于投票以“基于意见”结束此操作的人:正如我的回答所解释的,在某些情况下,这显然不是基于意见的。