如何实现以下特征的通用型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
我已经尝试了一些其他的变化。然而所有这些导致了更长的错误消息。