在Rust中,是否有一种方法可以遍历枚举类型的值?

161

我来自Java的背景,可能会像这样定义一个枚举类型enum Direction { NORTH, SOUTH, EAST, WEST},然后使用增强for循环对每个值进行操作:

for(Direction dir : Direction.values())  {
    //do something with dir
}
我希望能够使用Rust枚举来做类似的事情。

有一个关于 Enum 特性的问题(https://github.com/mozilla/rust/issues/5417),可能可以派生出类似 for dir in Direction::values() { ... } 的东西(也许)。 - huon
11个回答

0
我在其他答案中没有看到这个,所以我觉得提一下可能会有用。
enum Direction {
    NORTH,
    SOUTH,
    EAST,
    WEST,
}

impl Direction {
    pub fn into_iter() -> core::array::IntoIter<Direction, 4> {
        [
            Direction::NORTH,
            Direction::SOUTH,
            Direction::EAST,
            Direction::WEST,
        ]
        .into_iter()
    }
}

是的,它稍微违反了DRY原则,但另一方面不需要外部crate或花俏的宏,所以更简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接