Как реализовать черту ниже для вектора универсального типа 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());
}
Если посмотреть на документацию , кажется, что это должно быть что-то вроде:
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
Я пробовал несколько других вариантов, однако все они приводили к гораздо более длинным сообщениям об ошибках.