-> bool) как-то и потом их всех вызывать и проверять что определённый объект их проходит.
Я интуитивно попытался сделать так:
fn test<F: Fn(&X) -> bool>(filters: &[F]) и потом filters.iter().all(|f| f.call(s))
Vec<Box<dyn Fn(&X) -> bool>>
Надо именно боксить? Можешь пожалуйста объяснить почему нужен Box тут
ежели у тебя все замыкания одного типа (то есть это одно и то же замыкание, или это всё свободные функции), то можно и без боксов но подозреваю, что замыкания у тебя разные, а значит, у них разные типы, значит придётся использовать динамическую диспетчеризацию, а это Box<dyn Trait>
Как по ним проитерироваться и определить что они все вернули true для конкретного значения x?
kek.iter().all(|f| f(&x))
(только надо помнить, что на пустом итераторе all() возвращает true)
Потому что dyn Trait это не Sized тип и его можно использовать только жа каким-то поинтером
Если все замыкания известны наперёд, то можно хранить ссылки, а не боксить
Обсуждают сегодня