为什么 Rust 不允许“let v = Vec<i32>::new();”?

txh*_*ind 3 generics rust

我感觉Vec::<i32>::new()不太符合Vec<i32>

let v = Vec<i32>::new(); // cannot compile

let v1 : Vec<i32> = Vec::new(); // auto inference type parameters
let v2 = Vec::<i32>::new(); // quite weird
Run Code Online (Sandbox Code Playgroud)

Jef*_*ett 7

这种符号被亲切地称为涡轮鱼。

Vec<i32>::new()解析时需要进行权衡。是<引入通用参数,还是小于运算符?要区分差异需要潜在的无限制的前瞻。涡轮鱼避免了这一点。

这并不被普遍认为重要。曾有人提议允许Vec<i32>::new(),但该提议被放弃。看这里

也就是说,由于您在第二行中指出的类型推断,与类似语言相比,指定类型参数的需要较少。