У меня есть несколько ссылок на векторы опций над Rc
указателями на объекты, и я бы хотел перебрать все их элементы.
По сути, объявление этих векторов выглядит так:
let vec_0: Option<&Vec<Rc<TraitObject>>> = ...;
let vec_1: Option<&Vec<Rc<TraitObject>>> = ...;
...
let vec_n: Option<&Vec<Rc<TraitObject>>> = ...;
Я пытался использовать метод chain()
следующим образом:
let it = vec_o.unwrap_or(&vec![]).iter()
.chain(vec_1.unwrap_or(&vec![]))
...
.chain(vec_n.unwrap_or(&vec![]));
for el in it {
...
}
Но была проблема с этим кодом, поскольку эти пустые векторы являются временными объектами, которые будут удалены к тому времени, когда итератор
Прямо сейчас я сделал это прямым путем:
let mut vector = vec![];
if let Some(vc) = vec_0 {
vector.extend(vc.iter())
}
if let Some(vc) = vec_1 {
vector.extend(vc.iter())
}
...
if let Some(vc) = vec_n {
vector.extend(vc.iter())
}
for el in vector {
...
}
Этот выглядит громоздким и не очень удобным для чтения.
Есть ли способ перебрать все элементы vec_0
, vec_1
, et c. Полегче? Я новичок ie в Rust, и мне кажется, что должно быть решение с chain()
методом.
Любая помощь будет оценена =)