我在一个filter_map
中使用了闭包,最终以这个if语句结束:
if my_vec.is_empty() {
None
} else {
Some(my_vec)
}
有没有简单的方法将一个空的
Vec
转换成None
或Some(my_vec)
?我在一个filter_map
中使用了闭包,最终以这个if语句结束:
if my_vec.is_empty() {
None
} else {
Some(my_vec)
}
Vec
转换成None
或Some(my_vec)
?impl bool
中有一个名为 then
的函数,可以将 bool 类型转换为 option 类型。let opt = (!my_vec.is_empty()).then(|| my_vec);
还有在夜间版中可用的then_some
。
#![feature(bool_to_option)]
fn main() {
let my_vec: Vec<i32> = vec![];
let _opt = (!my_vec.is_empty()).then_some(my_vec);
}
既然您提到了filter_map
,那么考虑更改如何呢?
sth.filter_map(|item| {
let my_vec = some_operation(item);
if my_vec.is_empty() {
None
} else {
Some(my_vec)
}
})
to
sth
.map(|item| some_operation(item))
.filter( |vec| !vec.is_empty())