我想写简洁的代码。这是一个由于神秘原因而失败的代码段:
let va: &mut Vec<f64> = &mut Vec::new();
va.push(5.0);
let avg: f64 = va.iter().sum() / 2.0;
错误消息是:
error[E0283]: type annotations required: cannot resolve `_: std::iter::Sum<&f64>`
--> src/main.rs:36:30
|
36 | let avg: f64 = va.iter().sum() / 2.0;
| ^^^
在任何地方放置类型也无济于事。
let avg: f64 = va.iter().sum() as f64 / 2.0f64;
错误:
error[E0282]: type annotations needed
--> src/main.rs:36:20
|
36 | let avg: f64 = va.iter().sum() as f64 / 2.0f64;
| ^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for `S`
|
= note: type must be known at this point
下面的代码是很简单的重写,可以起作用:
let va: &mut Vec<f64> = &mut Vec::new();
va.push(5.0);
let sum: f64 = va.iter().sum();
let avg: f64 = sum / 2.0;
对于任何其他算术运算,此问题均相同。编译器的这种行为背后的逻辑是什么?
我的问题不是关于Turbofish语法的。