我想为Vec
实现Shl
特质,下面是代码。这将使得像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 )的类型参数;只有在当前包中定义的特质才能为类型参数实现[E0210]
据我所知,我必须打补丁到stdlib,更具体地说是collections :: vec包。是否有其他方法可以更改此代码以成功编译?