У меня есть код, который пытается выполнить сопоставление, где каждая ветвь может возвращать другой тип, но все эти типы реализуют Iterator<Item=usize>
.
let found: Iterator<Item = usize> = match requirements {
Requirements::A => MatchingAs { ainternals: [] },
Requirements::B => MatchingBs { binternals: [] },
Requirements::C => MatchingCs { cinternals: [] },
};
return found.any(|m| m == 1)
... где MatchingAs
, MatchingBs
и MatchingCs
все impl
std::iter::Iterator<Item = usize>
.
Я упираюсь в стену из-за того, что Iterator
не имеет размера:
| the trait `std::marker::Sized` is not implemented for `std::iter::Iterator<Item=usize>`
Есть ли хороший подход к тому, чтобы сопоставимые руки возвращали объекты с общей характеристикой, а затем полагались (только) на эту характеристику при обработке результатов?