虽然从Rust Book读取Data Types,但我注意到有时使用类型注释定义变量,有时不使用类型注释。
我什么时候应该使用类型注释?
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 numbers: Vec<_> = (0..10).collect();
类型也不能从项目中省略。特别地,const
和static
看起来非常类似于let
语句,但是必须指定类型[[必须:
const PI_SQUARED: i32 = 10;
// Not valid syntax
const HALF_PI = 1.5;
当指定类型时当类型为匿名时,无法指定不能
fn displayable() -> impl std::fmt::Display {
""
}
fn main() {
let foo = displayable();
// Not valid syntax:
let foo: impl std::fmt::Display = displayable();
}
可以指定类型,但不能指定类型但是在大多数情况下,可以指定类型,但不必指定:编译器可以从使用情况中推断出它。
在Rust中,通常建议在可能的情况下省略简单类型。人们决定不再简单的事物并决定是否必须指定事物的界限是非常基于观点的,超出了StackOverflow的范围。