什么时候需要使用类型注释?

shi*_*hin 3 types rust

在阅读《Rust Book》中的数据类型时,我注意到有时变量是用类型注释定义的,有时则不是。

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

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];
Run Code Online (Sandbox Code Playgroud)

mca*_*ton 9

当必须指定类型时

如果编译器无法自行推断类型,则必须指定:

let numbers: Vec<_> = (0..10).collect();
Run Code Online (Sandbox Code Playgroud)

项目中也不能省略类型。特别是,consts 和statics 看起来非常像语句,但必须指定let类型:

const PI_SQUARED: i32 = 10;

// Not valid syntax
const HALF_PI = 1.5;
Run Code Online (Sandbox Code Playgroud)

当无法指定类型时

当类型为匿名时,无法指定

fn displayable() -> impl std::fmt::Display {
    ""
}

fn main() {
    let foo = displayable();

    // Not valid syntax:
    let foo: impl std::fmt::Display = displayable();
}
Run Code Online (Sandbox Code Playgroud)

当可以指定类型但又没有太多时

但大多数时候,可以指定类型,但不必这样做:编译器可以根据使用情况推断出类型。

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