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))
}
}