gpt4 book ai didi

rust - From trait 仅适用于值(value)观,但我有引用资料

转载 作者:行者123 更新时间:2023-11-29 08:00:57 26 4
gpt4 key购买 nike

我想将任何数字类型的列表转换为 float 列表。以下代码编译失败:

#[cfg(test)]
mod tests {
#[test]
fn test_int_to_float() {
use super::int_to_float;
assert_eq!(vec![0.0, 1.0, 2.0], int_to_float(&[0, 1, 2]));
}
}

pub fn int_to_float<I>(xs: I) -> Vec<f64>
where
I: IntoIterator,
f64: From<I::Item>,
{
xs.into_iter().map(f64::from).collect()
}

错误信息是

error[E0277]: the trait bound `f64: std::convert::From<&{integer}>` is not satisfied
--> src/main.rs:6:41
|
6 | assert_eq!(vec![0.0, 1.0, 2.0], int_to_float(&[0, 1, 2]));
| ^^^^^^^^^^^^ the trait `std::convert::From<&{integer}>` is not implemented for `f64`
|
= help: the following implementations were found:
<f64 as std::convert::From<i8>>
<f64 as std::convert::From<i16>>
<f64 as std::convert::From<f32>>
<f64 as std::convert::From<u16>>
and 3 others
= note: required by `int_to_float`

我知道 I::Item 是对 i32 (&i32) 的引用,但是 f64::from 仅针对值实现。我如何编译它?

最佳答案

因为您接受任何可以转化为迭代器的东西,所以您可以将迭代器中的每个项目转化为解除引用的形式。这里最简单的做法是使用 Iterator::cloned :

assert_eq!(vec![0.0, 1.0, 2.0], int_to_float([0, 1, 2].iter().cloned()));

关于rust - From trait 仅适用于值(value)观,但我有引用资料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46479952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com