【发布时间】:2018-10-06 13:37:10
【问题描述】:
这段代码给出了正确的输出:0.018181818
fn main() {
let v: i32 = vec![1, 2, 3, 4, 5].iter().map(|&x: &i32| x.pow(2)).sum();
println!("{}", (v as f32).recip());
}
当我尝试将它们加入单行时,我失败了,因为sum 之后的输出类型与recip 所需的输入类型不同:
fn main() {
let v: i32 = vec![1, 2, 3, 4, 5]
.iter()
.map(|&x: &i32| x.pow(2))
.sum()
.recip();
println!("{}", v);
}
error[E0282]: type annotations needed
--> src/main.rs:2:18
|
2 | let v: i32 = vec![1, 2, 3, 4, 5]
| __________________^
3 | | .iter()
4 | | .map(|&x: &i32| x.pow(2))
5 | | .sum()
| |______________^ cannot infer type for `S`
|
= note: type must be known at this point
【问题讨论】:
-
recip未在i32上定义。您的第一个代码示例具有对f32的强制转换,而第二个没有该强制转换。此外,v在第二个示例中成为i32也没有任何意义。
标签: rust