孤儿规则 orphan rule
要为类型 A
实现特征 T
,那么 A
或者 T
必须至少有一个在当前的作用范围内。
如果想要实现 impl From<MyType> for Vec<i32>
。虽然From
和Vec
都属于外部,虽然违反了孤儿规则,但这种实现是被允许的,毕竟标准库也不可能得到 MyType
类型。
以下实现都是被允许的:
impl<T> From<T> for MyType
impl<T> From<T> for MyType<T>
impl<T> From<MyType> for Vec<T>
impl<T> ForeignTrait<MyType, T> for Vec<T>
以下实现是非法的:
impl<T> ForeignTrait for T
impl<T> From<T> for T
impl<T> From<Vec<T>> for T
impl<T> From<MyType<T>> for T
impl<T> From<T> for Vec<T>
impl<T> ForeignTrait<T, MyType> for Vec<T>