Учитывая 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?