添加更多操作后,iter()。sum()就会停止工作

时间:2019-07-03 14:46:52

标签: rust

我想写简洁的代码。这是一个由于神秘原因而失败的代码段:

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语法的。

0 个答案:

没有答案