Ich habe eine Eigenschaft Foo
erben von einem anderen Merkmal Bar
. Bar
hat einen zugehörigen Typ Baz
. Foo
Constrains Baz
so, dass Baz
Hoge
implementieren müssen.Erforderlich eine Eigenschaft gebunden an den zugeordneten Typ einer geerbten Eigenschaft
trait Hoge {}
trait Bar {
type Baz;
}
trait Foo: Bar where Self::Baz: Hoge {}
Allerdings, wenn ich eine generische Funktion erfordert der gattungs T
definieren Foo
,
// [DESIRED CODE]
fn fizz<T: Foo>(buzz: T) {
// ...
}
rustc
klagt mit EO277
zu implementieren, wenn ich T
explizit einschränken:
fn fizz<T: Foo>(buzz: T) where T::Baz: Hoge {
// ...
}
ich tun verstehe nicht, warum ich das tun muss. Ich möchte gerne [DESIRED CODE]
schreiben können. Was ist der empfohlene Weg, dies zu tun?
Wissen Sie, ob 'Merkmal Foo wo ...' konzeptuell gültig ist? Ich sehe, dass es kompiliert *, also ist die Syntax in Ordnung, aber es scheint nur ... seltsam. – Shepmaster
Sie können sich vorstellen, dass ich ein Verhalten des zugehörigen Typs ('Baz') benötige, damit ich, wenn ich' Foo' in einer Implementierung verwende, dieses Verhalten verwenden kann, ähnlich wie man ein Verhalten des geerbten Merkmals benötigen könnte ('Bar'). – Tsukki
Sorry, ich war unklar.Ihre * Absicht * ist verständlich genug (wie es bei metasyntaktischen Variablen wie 'Hoge' sein kann), ich frage meistens, ob Sie jemals eine' Where'-Klausel für eine Merkmalsdefinition gesehen haben, wenn es keine generischen Typen gab; Ich bin mir nicht sicher, ob ich es getan habe. – Shepmaster