我有两个枚举,NormalColour
并且BoldColour
都实现了这个Colour
特性.它们包含Blue
,BoldGreen
等等.
我想从同一个函数返回这两个类型的值,将它们视为只是一个Colour
值,paint
在结果上调用函数,但我找不到强制执行Rust编译器的方法这对我来说.我希望能够写出这样的东西:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我有什么类型才能使函数返回工作?
我最终想制作更多类型的实现Colour
,这就是为什么我不想将这两个枚举变成一个大枚举.
答案是特质对象.这意味着您将Box<Colour>
作为您的类型工作; bare Colour
不是可实例化的类型.您可以向操作员投射Box<T>
对象:.在许多地方这不是必要的(只是写,它可以自动强制),但有时它仍然是必要的.Box<Colour>
as
Box::new(NormalColour::White) as Box<Colour>
Box::new(NormalColour::White)
Box<Colour>
不过,如果你能把它作为枚举,这可能是一个更好的解决方案.
归档时间: |
|
查看次数: |
1194 次 |
最近记录: |