rust - 如何将 &i32 转换为 f64?
问题描述
我正在尝试解决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));
}
错误是:
error[E0277]: the trait bound `f64: std::convert::From<&i32>` is not satisfied
--> src/main.rs:6:17
|
6 | sum += &f64::from(val);
| ^^^^^^^^^ the trait `std::convert::From<&i32>` is not implemented for `f64`
|
= help: the following implementations were found:
<f64 as std::convert::From<f32>>
<f64 as std::convert::From<i16>>
<f64 as std::convert::From<i32>>
<f64 as std::convert::From<i8>>
and 3 others
= note: required by `std::convert::From::from`
我也尝试使用as
关键字,但没有帮助。
解决方案
f64
只实现From
fori32
,而不是&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
}
如果您尝试这样做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`
推荐阅读
- uinavigationcontroller - 如何从 mapkit 注释导航 - SwiftUI/Xcode 11
- python - 在数据框中添加一行并命名
- matplotlib - Matplotlib 热图真的很小
- git - 为什么我的来自 VM 的 Git 提交显示为来自完全不同的人?
- java - java类型擦除如何处理'?
- node.js - Regix:从 MediaWiki XML 文档中提取模板列表
- flutter - 如何将 Firestore DocumentSnapshot 转换为 dart 对象实例
- python - 在python中提取href
- haskell - Haskell 中的递归定点函数
- javascript - 'class' 语法在 javascript 中是如何工作的?