gpt4 book ai didi

enums - 如何处理 flat_map 中的单个元素?

转载 作者:行者123 更新时间:2023-11-29 08:28:14 26 4
gpt4 key购买 nike

<分区>

是否可以在 Rust 的 flat_map 中处理不同数量的元素?

我有一种情况,根据条件我需要映射单个 enum 元素或 enum 元素的向量。

我尝试使用 std::iter::once 但它不起作用,因为 onceVec::iter 是不同的类型无法从相同的 if 条件返回。

enum Enum {
Ident(String),
Val(i32),
}

fn main() {
let my_vec = vec![1, 2, 3];
let condition = true; // Any condition

my_vec
.iter()
.flat_map(|x| {
if condition {
std::iter::once(Enum::Ident("id".to_string())).into_iter() /* single Enum element */
} else {
vec![Enum::Val(1), Enum::Val(2)].iter() /* vector of Enum elements */
}
})
.collect::<Vec<Enum>>()
}
error[E0308]: `if` and `else` have incompatible types
--> src/main.rs:16:17
|
13 | / if condition {
14 | | std::iter::once(Enum::Ident("id".to_string())).into_iter() /* single Enum element */
| | ---------------------------------------------------------- expected because of this
15 | | } else {
16 | | vec![Enum::Val(1), Enum::Val(2)].iter() /* vector of Enum elements */
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::iter::Once`, found struct `std::slice::Iter`
17 | | }
| |_____________- `if` and `else` have incompatible types
|
= note: expected type `std::iter::Once<Enum>`
found struct `std::slice::Iter<'_, Enum>`

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com