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 Antworten

Ich 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 lassenColourAus diesem Grund bin ich nicht daran interessiert, die beiden Aufzählungen in eine große Aufzählung umzuwandeln.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage