在通用结构实现中将文字转换为关联的类型

时间:2019-01-05 02:35:45

标签: generics rust type-conversion associated-types

假设关联类型具有适当的特征绑定,如何在迭代器中将0.0或任何其他数字转换为关联的Item类型?以下代码描述了我的尝试。

use num::Float;
use std::iter::Iterator;

pub struct Signal<S>
    where S: Iterator, S::Item: Float
{
    signal: S,
    val: S::Item,
}

impl<S> Signal<S>
    where S: Iterator, S::Item: Float
{
    pub fn new(signal: S) -> Self {
        Signal {
            signal: signal,
            val: S::Item::from(0.0),
        }
    }
}

我当前收到错误消息:预期的关联类型,找到了浮点变量

2 个答案:

答案 0 :(得分:2)

NumCast::from似乎是最好的选择。我建议不要导入它,因为方法名与广泛使用的From::from冲突。

use num::Float;
use std::iter::Iterator;

pub struct Signal<S>
    where S: Iterator, S::Item: Float
{
    signal: S,
    val: S::Item,
}

impl<S> Signal<S>
    where S: Iterator, S::Item: Float
{
    pub fn new(signal: S) -> Self {
        Signal {
            signal: signal,
            val: num::NumCast::from(0.0).unwrap(),
        }
    }
}

答案 1 :(得分:2)

Float特征不提供from({float}) -> Self操作。但这确实取决于NumCast

use num::{Float, NumCast};
…
val: NumCast::from(0.0).unwrap(),

以及Zero上:

use num::{Float, Zero};
…
val: S::Item::zero(),