Versuchen, ein Merkmal Gussteil Problem zu überschreiben, here beschrieben. Steckte die Eigenschaft Funktion bei der Umsetzung, die die Enum-Instanz mit eigener Implementierung liefert innen:Rust Merkmal Objekt & Selbst kann nicht in einer Merkmal Standardfunktion verwendet werden
//the "trait matcher" enum
enum Side<'a> {
Good(&'a GoodDude),
Bad(&'a BadDude),
}
//very general trait
trait Dude {
fn who_am_i(&self) -> Side;
fn do_useful_stuff(&self);
}
//specific trait #1
trait GoodDude: Dude {
fn who_am_i_inner(&self) -> Side {
Side::Good(&self)
}
fn save_the_world(&self);
}
//specific trait #2
trait BadDude: Dude {
fn who_am_i_inner(&self) -> Side {
Side::Bad(&self)
}
fn do_evil(&self);
}
Aber aus irgendeinem Grunde die Zusammenstellung dieses Teils nicht mit E0277:
trait GoodDude: Dude {
fn who_am_i_inner(&self) -> Side {
Side::Good(&self) //&self should be &GoodDude, but compiler says it is not...
}
fn save_the_world(&self);
}
und Ergebnissen in:
<anon>:16:20: 16:25 error: the trait `GoodDude` is not implemented for the type `&Self` [E0277]
<anon>:16 Side::Good(&self)
^~~~~
<anon>:16:20: 16:25 help: see the detailed explanation for E0277
<anon>:16:20: 16:25 note: required for the cast to the object type `GoodDude`
Kann dies ausgearbeitet werden?
Voll Beispiel: https://play.rust-lang.org/?gist=8ae2384e401da76c16214c4a642ce8b4&version=stable&backtrace=0
Versuchen Sie 'Side :: Good (self)' anstelle von 'Side :: Good (& self)'. – kennytm
kann ich nicht. Der Implementierer der Eigenschaften kann eine riesige Struktur sein, ich muss dort Ausleihen und Merkmalsobjekte verwenden. Außerdem wird sofort nach der Größe gefragt (das Merkmal 'core :: marker :: Sized' ist nicht implementiert) – snuk182
' fn name (& self) 'kann als' fn name (self: & Self) 'entzuckert werden. Typ der 'self' Variablen ist' & Self'. – aSpex