Черты как возвращаемое значение из функции [дубликат]
На этот вопрос уже есть ответ здесь:
Как вернуть экземпляр черты из метода? 3 ответаУ меня есть два перечисления,NormalColour
а такжеBoldColour
оба из которых реализуютColour
черта характера. Они содержатBlue
, BoldGreen
, и так далее.
Я хотел бы вернуть значения обоих этих типов из одной и той же функции, рассматривая их так, как будто они простоColour
значение, вызывающееpaint
на результат, но я не могу найти способ заставить Rust complier сделать это для меня. Я хотел бы иметь возможность написать что-то вроде этого:
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
}
}
Какого типа я должен заставить функцию возвращаться, чтобы она работала?
Я в конечном итоге хотел бы сделать больше типов реализоватьColour
Вот почему я не заинтересован в том, чтобы просто превратить два перечисления в одно большое перечисление.