我想定义一个带有迭代器的函数every
,虽然它不是None
,但要确保所有值都是true
。
示例应用程序:
every([true, true, true].into_iter()) == true
every([true, false, true].into_iter()) == false
我很难让它仅与Vec
一起使用,更不用说Iterator
了。我已经尝试了以下方法和一些变体,但是还没到任何地方。
use std::ops;
fn every<T>(v: Vec<T>) -> bool
where
T: ops::Not,
{
for item in v {
match !item {
T::No => return false,
}
}
true
}
此代码得到错误:
error[E0599]: no associated item named `No` found for type `T` in the current scope
--> src/lib.rs:9:13
|
9 | T::No => return false,
| ^^^^^ associated item not found in `T`
答案 0 :(得分:3)
fn every<T, I>(v: I) -> bool
where
I: IntoIterator<Item = T>,
T: std::ops::Not<Output = bool>,
{
v.into_iter().all(|x| !!x)
}
v
可以是实现IntoIterator
的任何东西,例如Vec
,也可能是map
或filter
之类的东西,这使得该解决方案非常通用。