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.

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/rust-rcei-2020/...

译文地址:https://learnku.com/docs/rust-rcei-2020/...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~