假设我有结构“F1”和“F2”来实现Trait“Foo”。
现在我想编写一个接受Foo并返回Bar的函数。
trait Foo {
fn get_bar(&self) -> &Bar
}
fn do_match(f: &Foo) -> &Bar {
&match *f {
F1 => { f.get_bar() } // Error: mismatched types: expected `Foo`, found an enum or structure pattern
F2 => { f.get_bar().modify_somehow(3f64) }
}
}
是否可以匹配实现特征Foo的结构?
答案 0 :(得分:2)
不,match
无法匹配值的具体类型。考虑到match
要求模式是详尽的,并且特征是开放的(来自其他模块或其他条件的类型可以实现您的特征),您可能永远不会涵盖所有情况(除非您有一个简单的变量绑定,如{{ 1}}在最后一臂上)。 x
在match
s上效果更好,这些已关闭(变量集在枚举的定义中已修复)。
您可以引入第二个特征来进行动态调度。请注意,您可以在不同模块中定义第二个特征及其实现,也可以在定义enum
和F1
的不同框中定义。
F2