【发布时间】:2021-05-01 12:30:45
【问题描述】:
我正在尝试在 Rust 中展平 Enum 的向量,但我遇到了一些问题:
enum Foo {
A(i32),
B(i32, i32),
}
fn main() {
let vf = vec![Foo::A(1), Foo::A(2), Foo::B(3, 4)];
let vi: Vec<i32> = vf
.iter()
.map(|f| match f {
Foo::A(i) => [i].into_iter(),
Foo::B(i, j) => [i, j].into_iter(),
})
.collect(); // this does not compile
// I want vi = [1, 2, 3, 4]. vf must still be valid
}
我可以只使用常规的 for 循环并将元素插入到现有向量中,但这并不有趣。我想知道是否有更惯用的 Rust 方法。
【问题讨论】:
-
您可以在
Foo上实现IntoIterator然后链式迭代器,但老实说,这里很难比带有match的for循环更简洁或更清晰。
标签: rust