явное указание типов через ::<...> вместо присваивания переменным?
Есть у меня вот такой вот кусочек например, тут по-другому вроде как никак:
fn get_paths<'a, Patterns>(patterns: Patterns) -> Result<impl Iterator<Item = PathBuf>>
where
Patterns: IntoIterator,
Patterns::Item: AsRef<str> + 'a,
{
Ok(patterns
.into_iter()
.map(|p| glob::glob(p.as_ref()))
.collect::<Result<Vec<_>, _>>()?
.into_iter()
.flatten()
.collect::<Result<Vec<_>, _>>()?
.into_iter())
}
Но "в книжках" почти везде пишут что мол указывайте тип в let, а синтаксис с ::<...> как-то обходят стороной (хотя для collect это вообще незаменимая штука кмк).
если оно работает то норм. Потому что дебажить такие цепочки не очень
Почему бы не сделать что-то типа patterns .into_iter() .try_fold(vec![], |mut ret, p| { for p in p.flatten() { ret.push(p?); } Ok(ret) })
Вариант с for читается проще, а красота цепочки уже испорчена.
фу какой некрасивый fold
как сделать красивее?
Обсуждают сегодня