将&i32转换为f64

问题描述 投票:1回答:1

生锈我是新手。试着解决本章末尾的练习: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”关键字,但它没有帮助。

rust
1个回答
4
投票

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`
© www.soinside.com 2019 - 2024. All rights reserved.