如何实现泛型类型VEC的载体的特征 ?

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

如何实现以下特征的通用型Vec<T>的载体?

例如,如何实现一个通用的方法下面的(工作)Difference特质(例如,使其适用于Vec<i32>Vec<f32>Vec<f64>)?

trait Difference {
    fn diff(&self) -> Vec<f64>;
}

impl Difference for Vec<f64> {
    fn diff(&self) -> Vec<f64> {
        self.windows(2)
            .map(|slice| (slice[0] - slice[1]))
            .collect()
    }
}

fn main() {
    let vector = vec![1.025_f64, 1.028, 1.03, 1.05, 1.051];
    println!("{:?}", vector.diff());
}

从寻找at the documentation,现在看来似乎应该是沿着线的东西:

trait Difference<Vec<T>> {
    fn diff(&self) -> Vec<T>;
}

impl Difference for Vec<T> {
    fn diff(&self) -> Vec<T> {
        self.windows(2)
            .map(|slice| (slice[0] - slice[1]))
            .collect()
    }
}

fn main() {
    let vector = vec![1.025_f64, 1.028, 1.03, 1.05, 1.051];
    println!("{:?}", vector.diff());
}

然而上述结果:

error: expected one of `,`, `:`, `=`, or `>`, found `<`
 --> src/main.rs:2:21
  |
2 | trait Difference<Vec<T>> {
  |                     ^ expected one of `,`, `:`, `=`, or `>` here

我已经尝试了一些其他的变化。然而所有这些导致了更长的错误消息。

generics syntax rust traits
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.