f64
только реализует From
для 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`