valores valor una tipos retornar retornan que pasar parametros funciones funcion entre ejemplos con codigos traits rust

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.