unix 如何比较Enum值与u32

oxcyiej7  于 2023-08-04  发布在  Unix
关注(0)|答案(2)|浏览(239)

我有这样的代码。

#[derive(PartialEq)]
enum FALUDA {
    Juice,
    Ice,
}

let a: u32 = 0;

if a == FALUDA::Juice {
 //Yay
}

字符串
如果我尝试这个代码,我得到下面的错误。

78 |     if a                 == FALUDA::Juice {
   |        --------             ^^^^^^^^^^^^^ expected `u32`, found `FALUDA`
   |        |
   |        expected because this is `u32`


我不想投。

ht4b089n

ht4b089n1#

您需要将枚举值转换为u32a的类型)。
下面是一个完整的例子:

#[derive(PartialEq)]
enum FALUDA {
    Juice,
    Ice,
}

fn main() {
    let a: u32 = 0;
    if a == FALUDA::Juice as u32 {
        print!("Juicy")
    }
}

字符串
对于简单的情况下铸造真的是所有一个应该需要的。但是如果你需要做很多从/到枚举值的转换,你可以考虑使用crate,比如strum_macros

wwtsj6pe

wwtsj6pe2#

-- * 我们能用match实现什么吗?*
是的,您可以为u32实现PartialEq<FALUDA>

#[derive(PartialEq)]
enum FALUDA {
    Juice,
    Ice,
}

impl PartialEq<FALUDA> for u32 {
    fn eq(&self, rhs: &FALUDA) -> bool {
        match rhs {
            FALUDA::Juice => self == &0,
            FALUDA::Ice => self == &1,
        }
    }
}

fn main() {
    let a: u32 = 0;

    if a == FALUDA::Juice {
        println!("Yay");
    }
}

字符串
但是如果你决定改变FALUDA的变体的顺序,这可能会证明是不稳定的。

相关问题