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