в дженерике? Обхожу гетерогенное дерево, поэтому держу перечисление итераторов на каждом уровне. И в один из вариантов этого перечисления надо положить 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> кста не подойдет?
Можно просто всё замыкание целиком забоксить
Обсуждают сегодня