【发布时间】:2014-10-14 07:28:53
【问题描述】:
我想为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;
}
编译失败并出现以下错误:
无法提供扩展实现,其中 trait 和类型都未在此 crate 中定义 [E0117]
或
类型参数
T必须用作某些本地类型的类型参数(例如MyStruct<T>);类型参数只能实现当前 crate 中定义的特征 [E0210]
据我了解,我必须修补 stdlib,更具体地说是 collections::vec 板条箱。是否有其他方法可以更改此代码以成功编译?
【问题讨论】:
-
这在设计上是不可能的。