E0117
只有在当前 crate 中定义的 trait 才能被任意类型所实现。
错误代码示例:
impl Drop for u32 {}
该错误指出其违反了 Rust 中 trait 实现的孤儿规则。该规则为当满足下面条件时,禁止为外部 trait (定义在其他 crate 的 trait ) 的任何实现:
实现该 trait 的类型是外部的
所有传递给该 trait 的参数(如果有)也是外部的
要避免这种错误,请确保 impl 至少引用了一个本地类型:
pub struct Foo; // 本地 crate 中定义的类型
impl Drop for Foo { // 就可以像这样实现 trait
// 实现该 trait 的代码
}
impl From<Foo> for i32 { // 或者将本 crate 中的类型作为类型参数
fn from(i: Foo) -> i32 {
0
}
}
或者,在本地定义一个 trait 并实现它:
trait Bar {
fn get(&self) -> usize;
}
impl Bar for u32 {
fn get(&self) -> usize { 0 }
}
有关孤儿规则的信息,请参阅 RFC 1023.
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。