代码之家  ›  专栏  ›  技术社区  ›  ohwelppp

返回枚举值[重复]

  •  -1
  • ohwelppp  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我正在用铁锈来制造泡沫。我从最简单的版本转到使用枚举,但无法解析它。我读过Enums非常有效,所以我尽量充分利用它们。

    以下是我的实现:

    use std::fmt;
    
    fn main() {
        for i in 1..100 {
            println!("{}", fizzbuzz(i))
        }
    }
    
    fn fizzbuzz(value: i32) -> Answer {
        use crate::Answer::*;
        return match (value % 3, value % 5) {
            (0, 0) => FizzBuzz,
            (0, _) => Fizz,
            (_, 0) => Buzz,
            (_, _) => Nothing(value),
        };
    }
    
    enum Answer {
        FizzBuzz,
        Fizz,
        Buzz,
        Nothing(i32),
    }
    
    impl fmt::Display for Answer {
        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
            use crate::Answer::*;
            match self {
                FizzBuzz => write!(f, "FizzBuzz"),
                Fizz => write!(f, "Fizz"),
                Buzz => write!(f, "Buzz"),
                Nothing() => write!(f, "number passed to NoBuzz"),
            }
        }
    }
    

    我有两个问题:

    • 如何在中使用实际枚举的名称 match self 街区? 在爪哇,我可以用 FizzBuzz.name() 它会打印出来 "FizzBuzz" -可能生锈吗?

    • 可以打印那个吗 value 我过去了 Nothing 在里面 fizzbuzz 功能?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Shepmaster Tim Diekmann    6 年前

    可以导出可打印的表示形式 用于调试 具有 #[derive(Debug)] . 这样你就可以用 println!("{:?}", self)

    例子:

    #[derive(Debug)]
    enum Answer {
        FizzBuzz,
        Fizz,
        Buzz,
        Nothing(i32),
    }
    
    match self {
        Nothing(_) -> /* ... */,
        other -> println!("{:?}", other),
    }
    

    但是,写一个 Display 举出你自己。你得翻译一下( Fizz -> "Fizz" 等等)你自己,但是之后它将在一个集中的位置,你可以像以前那样把它传递给格式化程序。

    把价值从 Nothing ,您只需要在它上面进行模式匹配并给它一个名称。而不是

    Nothing(_) => // Do something generic
    

    考虑

    Nothing(n) => // Do something that involves the number n