If statement 如果我没有';我不在乎它有什么价值?

If statement 如果我没有';我不在乎它有什么价值?,if-statement,enums,rust,If Statement,Enums,Rust,我有一个枚举: #[derive(PartialEq, Eq)] enum Foo { A, B(usize), } 我可以在涉及其他逻辑(如baz)的if语句中使用它: fn bar(foo: &Foo, baz: bool) { if foo == &Foo::B(3) || baz { println!("Do stuff") } } 但是,这不会编译: fn bar(foo: &Foo, baz: bool) {

我有一个枚举:

#[derive(PartialEq, Eq)]
enum Foo {
    A,
    B(usize),
}
我可以在涉及其他逻辑(如
baz
)的
if
语句中使用它:

fn bar(foo: &Foo, baz: bool) {
    if foo == &Foo::B(3) || baz {
        println!("Do stuff")
    }
}
但是,这不会编译:

fn bar(foo: &Foo, baz: bool) {
    if foo == &Foo::B(_) || baz {
        println!("Do stuff")
    }
}

当我不关心
B
包含什么值时,如何在
if
语句中使用它?

在这种情况下,使用
匹配可能更容易:

fn do_stuff() {
    println!("Do stuff")
}

fn bar(foo: &Foo, baz: bool) {
    match foo {
        &Foo::B(_) => do_stuff(),
        _ => {
            if baz {
                do_stuff();
            }
        }
    }
}
或者,如果让
,则使用

fn bar(foo: &Foo, baz: bool) {
    if let &Foo::B(_) = foo {
        do_stuff();
    } else {
        if baz {
            do_stuff();
        }
    }
}
我不确定你是否可以轻松地将其全部拉到一个条件中,这会让你重复
所做的事情

你可以使用:

如果您必须对此进行大量测试,我建议您为其实现一种方法:

impl Foo {
    fn is_b(&self) -> bool {
        discriminant(self) == discriminant(&Foo::B(0))
    }
}

通过匹配
(foo,baz)
:,可以消除重复数据。虽然您可能会或可能不会认为这是更可维护的。是否有任何原因为什么<代码>如果Foo==和Fo:::B(^){ BZ{{/Cord}?在将来的某个时候不能添加到语言中?@ HiDeField:有一个问题:
impl Foo {
    fn is_b(&self) -> bool {
        discriminant(self) == discriminant(&Foo::B(0))
    }
}