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.