Enums 如何将枚举值传递给函数?

Enums 如何将枚举值传递给函数?,enums,rust,arguments,Enums,Rust,Arguments,我有几个列举: enum Foo { A(A), B(B) } enum A { C(i32), D(i32) } enum B { E(i32), F(i32) } 我如何编写一个函数,它接受一个Foo并检查它是否是,比如说,一个B::E,然后返回一个选项 编辑:为了澄清,枚举值作为参数传递。我尝试用签名f(value:Foo,expected:Foo)来实现它,但我不确定如何调用它,因为(再次使用B::E编译器希望提供i32。你不能用函数

我有几个列举:

enum Foo {
    A(A),
    B(B)
}

enum A {
    C(i32),
    D(i32)
}

enum B {
    E(i32),
    F(i32)
}
我如何编写一个函数,它接受一个
Foo
并检查它是否是,比如说,一个
B::E
,然后返回一个
选项


编辑:为了澄清,枚举值作为参数传递。我尝试用签名
f(value:Foo,expected:Foo)
来实现它,但我不确定如何调用它,因为(再次使用
B::E
编译器希望提供i32。

你不能用函数实现它,因为函数参数必须是完整的值,并且是“枚举B的变量E”的表达方式有一个图案。但是你可以用一个宏,它可以把模式作为参数

首先,这里是如何在函数中使用固定模式:

fn filter_e (x: Foo) -> Option<Foo> {
    match x {
        Foo::B (B::E (_)) => Some (x),
        _ => None,
    }
}
你可以这样称呼它:

filter_foo!(x, Foo::B (B::E (_)))

有关宏的更多详细信息,请参阅。

我不确定这是否解决了您遇到的问题,但您可以使用匹配表达式:

fn my_函数(f:Foo)->选项{
匹配f{
Foo::B(B::E())=>{/*您的代码*/}
_=>无//否则,返回无
}
}

这几乎是学习生锈的第一天。我建议您在继续之前阅读,否则您将需要不断地问这些简单的问题,这些问题对其他来Stackoverflow的人都没有用处。对不起,我没有澄清我的意思。如果您包含一个说明您正在尝试做什么以及您将遇到的错误的列表,那将非常有用。现在的情况是,人们只能猜测你在尝试什么。
filter_foo!(x, Foo::B (B::E (_)))