我正在尝试解决Rust Book 本章末尾的一个练习。
这是一个代码示例:
fn mean(v: &Vec<i32>) -> f64 {
let mut sum = 0.0;
let mut count = 0.0;
for val in v {
sum += &f64::from(val);
count += 1.0;
}
sum / count
}
fn main() {
let v = vec![1, 2, 3, 4];
println!("The mean is {}", mean(&v));
}
Run Code Online (Sandbox Code Playgroud)
错误是:
fn mean(v: &Vec<i32>) -> f64 {
let mut sum = 0.0;
let mut count = 0.0;
for val in v {
sum += &f64::from(val);
count += 1.0;
}
sum / count
}
fn main() {
let v = vec![1, 2, 3, 4];
println!("The mean is {}", mean(&v));
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用as关键字,但没有帮助。
Joe*_*lay 11
f64只实现Fromfori32, not &i32(这是对 an 的引用i32)。要使其正常工作,您需要取消引用val.
fn mean(v: &Vec<i32>) -> f64 {
let mut sum = 0.0;
let mut count = 0.0;
for val in v {
sum += f64::from(*val);
count += 1.0;
}
sum / count
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试这样做val as f64,这同样适用,事实上,在这种情况下,您会收到更有帮助的错误消息:
error[E0606]: casting `&i32` as `f64` is invalid
--> src/main.rs:6:16
|
6 | sum += val as f64;
| ---^^^^^^^
| |
| cannot cast `&i32` as `f64`
| help: dereference the expression: `*val`
Run Code Online (Sandbox Code Playgroud)