生锈我是新手。试着解决本章末尾的练习:https://doc.rust-lang.org/book/ch08-03-hash-maps.html
这是一个代码示例:
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));
}
错误是:
error[E0277]: the trait bound `f64: std::convert::From<&i32>` is not satisfied
我也尝试使用“as”关键字,但它没有帮助。
f64
只有implements From
for i32
,而不是&i32
(这是对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
}
如果您尝试执行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`