Учитывая Vector из Option<T> в Rust, есть ли простой способ проверить, заполнено ли Vector None?
Например, я могу найти простой способ проверить, заполнено ли Vector Some(usize).
fn main() {
let x: Vec<Option<usize>> = vec![None, None, Some(3)];
if x.contains(&None) {
println!("The Vector is not filled with Some(usize)!");
}else {
println!("The Vector is filled with Some(usize)!");
}
}
Однако, если я заменю &None на &Some(usize) в этом коде, я получу ошибку.
fn main() {
let x: Vec<Option<usize>> = vec![None, None, Some(3)];
if x.contains(&Some(usize)){
println!("The Vector is not filled with None!");
}else {
println!("The Vector is filled with None!");
}
}
Compiling playground v0.0.1 (/playground)
error[E0423]: expected value, found builtin type `usize`
--> src/main.rs:3:25
|
3 | if x.contains(&Some(usize)){
| ^^^^^ not a value
В качестве обходного пути я мог бы просто подсчитать число None и сравнить его с x.len().
fn main() {
let x: Vec<Option<usize>> = vec![None, None, Some(3)];
if x.iter().filter(|x| **x==None).count() == x.len(){
println!("The Vector is filled with None!");
}else {
println!("The Vector is not filled with None!");
}
}
И... это выглядит слишком сложным. Есть ли способ исправить эту ошибку, чтобы код работал как надо? Если нет, есть ли более лаконичный или простой способ сделать это в Rust?