我来自Java的背景,可能会像这样定义一个枚举类型enum Direction { NORTH, SOUTH, EAST, WEST}
,然后使用增强for循环对每个值进行操作:
for(Direction dir : Direction.values()) {
//do something with dir
}
我希望能够使用Rust枚举来做类似的事情。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或花俏的宏,所以更简单。
Enum
特性的问题(https://github.com/mozilla/rust/issues/5417),可能可以派生出类似for dir in Direction::values() { ... }
的东西(也许)。 - huon