traits - tipos - Rasgos como un valor de retorno de una función
retornar valor de una funcion javascript (1)
La respuesta es rasgo de objetos . Esto significa que trabajará con Box<Colour> como su tipo; Colour desnudo no es un tipo instanciable. Puede lanzar objetos Box<T> a Box<Colour> con el operador as : Box::new(NormalColour::White) as Box<Colour> . En muchos lugares esto no es necesario (solo escriba Box::new(NormalColour::White) y puede ser coercionado automáticamente a Box<Colour> ), pero a veces será necesario.
Aún así, si puedes hacerlo como una enumeración, esa será probablemente una solución más agradable.
Tengo dos enumeraciones, NormalColour y BoldColour , que implementan el rasgo Colour . Contienen Blue , BoldGreen , etc.
Me gustaría devolver los valores de estos dos tipos de la misma función, tratándolos como si fueran solo un valor de Colour , llamando a la función de paint sobre el resultado, pero no puedo encontrar una manera de forzar el compilador de Rust. haciendo esto por mí Me gustaría poder escribir algo como esto:
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
}
}
¿Qué tipo de función debo devolver para que funcione?
Eventualmente me gustaría hacer que más tipos implementen Colour , por lo que no estoy interesado en convertir las dos enumeraciones en una gran enumeración.