E0118

未匹配的标注

为非结构体,枚举体,联合体或者 trait 对象定义了固有实现。

错误代码示例:

impl (u8, u8) { // error: 没有找到标称类型的固有实现
    fn get_state(&self) -> String {
        // ...
    }
}

要修复此错误,请为类型实现一个 trait 或者将其包装进一个结构体,例如:

// 在这儿创造了一个 trait
trait LiveLongAndProsper {
    fn get_state(&self) -> String;
}

// 现在就可以在 (u8, u8) 上实现它了
impl LiveLongAndProsper for (u8, u8) {
    fn get_state(&self) -> String {
        "He's dead, Jim!".to_owned()
    }
}

或者,也可以创建一个新类型,一个新类型是一个包装元组结构体,例如, NewType 是 Foo 包装在 struct NewType(Foo) 的一个新类型。 例如:

struct TypeWrapper((u8, u8));

impl TypeWrapper {
    fn get_state(&self) -> String {
        "Fascinating!".to_owned()
    }
}

除了在引用上定义固有实现外,也可以将引用移动到实现内部:


struct Foo;

impl &Foo { // error: 没有找到标称类型的固有实现
    fn bar(self, other: Self) {}
}

变成


struct Foo;

impl Foo {
    fn bar(&self, other: &Self) {}
}

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

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

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

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

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


暂无话题~