Eigenschaften als Rückgabewert einer Funktion [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Wie gebe ich eine Instanz eines Merkmals von einer Methode zurück? 3 AntwortenIch habe zwei Aufzählungen,NormalColour
undBoldColour
, die beide implementieren dieColour
Merkmal. Sie beinhaltenBlue
, BoldGreen
, und so weiter.
Ich möchte Werte dieser beiden Typen von derselben Funktion zurückgeben und sie so behandeln, als wären sie nur einColour
Wert, Aufruf derpaint
Funktionieren Sie mit dem Ergebnis, aber ich kann keinen Weg finden, den Rust-Complier dazu zu zwingen, dies für mich zu tun. Ich möchte in der Lage sein, so etwas zu schreiben:
pub trait Colour {
fn paint(&self, input: &str) -> String;
}
fn file_colour(stat: &io::FileStat) -> Colour {
if stat.kind == io::TypeDirectory {
Blue
} else if stat.perm & io::UserExecute == io::UserExecute {
BoldGreen
} else {
White
}
}
Welche Art muss ich die Funktion zurückgeben lassen, damit sie funktioniert?
Ich werde eventuell gerne weitere Typen implementieren lassenColour
Aus diesem Grund bin ich nicht daran interessiert, die beiden Aufzählungen in eine große Aufzählung umzuwandeln.