Я хотел реализовать черту Shl
для Vec
, код ниже. Это сделало бы такие вещи, как vec << 4
, что было бы приятным сахаром для vec.push(4)
.
use std::ops::Shl;
impl<T> Shl<T> for Vec<T> {
type Output = Vec<T>;
fn shl(&self, elem: &T) -> Vec<T> {
self.push(*elem);
*self
}
}
fn main() {
let v = vec![1, 2, 3];
v << 4;
}
Ошибка компиляции со следующей ошибкой:
не может обеспечить реализацию расширения, в которой оба элемента и типа не определены в этом ящике [E0117]
или
параметр типа
T
должен использоваться как параметр типа для некоторого локального типа (например,MyStruct<T>
); только свойства, определенные в текущем ящике, могут быть реализованы для параметра типа [E0210]
Как я понял, мне пришлось бы исправлять stdlib, а точнее ящик collections::vec
. Есть ли способ изменить этот код для успешной компиляции?