你怎么匹配生锈的特性?

时间:2014-09-26 03:07:01

标签: struct match matching rust traits

假设我有结构“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的结构?

1 个答案:

答案 0 :(得分:2)

不,match无法匹配值的具体类型。考虑到match要求模式是详尽的,并且特征是开放的(来自其他模块或其他条件的类型可以实现您的特征),您可能永远不会涵盖所有情况(除非您有一个简单的变量绑定,如{{ 1}}在最后一臂上)。 xmatch s上效果更好,这些已关闭(变量集在枚举的定义中已修复)。

您可以引入第二个特征来进行动态调度。请注意,您可以在不同模块中定义第二个特征及其实现,也可以在定义enumF1的不同框中定义。

F2