в дженерике? Обхожу гетерогенное дерево, поэтому держу перечисление итераторов на каждом уровне. И в один из вариантов этого перечисления надо положить std::iter::FilterMap<BaseIterator,FIlterFunctionType>, а он требует тип FilterFunctionType. Но это замыкание будет определяться только в одном месте, и мне ни к чему держать <F> во всей структуре итератора, тем более не хочу, чтобы абстракция протекала. Условно:
enum LinkRecursiveAstKindRefMut<'a> {
HeaderIter(std::slice::IterMut<'a, Header>),
TextParagraphLinksIter( std::iter::FilterMap<std::slice::IterMut<'a, TextParagraphContentKind>,____FWhyCantITypedefClosure____>),
// ...
}
pub struct LinkValueIterator<'a> {
stack: Vec<LinkRecursiveAstKindRefMut<'a>,
}
impl<'a> Iterator for LinkValueIterator<'a> {
type Item = &'a mut LinkValue;
fn next (&mut self) -> Option<Self::Item> {
// ...
match ast {
// ...
Ast::TextParagraph(paragraph_content_vec) => {
// Здесь замыкание ставится единожды - как предоставить тип???
self.stack.push(LinkRecursiveAstKindRefMut::TextParagraphLinksIter(paragraph_content_vec.iter_mut()
.filter_map(
|p|
match p {
TextParagraphContentKind::InlineLink(inline_link) => Some(&mut inline_link.link),
_ => None,
}
)
);
},
}
// ...
}
}
Спасибо
таит по идее надо
std::iter::FilterMap<BaseIterator,fn(T) -> T1> кста не подойдет?
Можно просто всё замыкание целиком забоксить
Обсуждают сегодня