我编写了以下 Rust 函数,其中包含一个闭包。
fn has_a_none_element(&self) -> bool {
let elements_is_none =
self.elements.iter().flatten().map(Option::is_none);
let optional_any_is_none =
elements_is_none.reduce(
|lhs, rhs| {
lhs || rhs
}
);
match optional_any_is_none {
None => false,
Some(any_is_none) => any_is_none,
}
}
self.elements
属于 type Vec<Vec<Option<f64>>>
,尽管这并不是特别重要。
重要的是关闭:
|lhs, rhs| {
lhs || rhs
}
这是一个“或”函数。人们可能期望已经有一个内置函数可以用作闭包的一部分。
这样的事情存在吗?
直击标题,标准库中没有命名函数来表达
||
运算符。其他运算符可以这样命名And::and
,但由于逻辑或仅适用于自bool
定义结构,而不适用于自定义结构,因此这不是问题。不过,相邻行为可以通过
|
运算符(也称为BitOr
特征)获得,并且除了短路之外具有与 s 相同的||
行为bool
。使用它我们可以得到这个:不过,解决最终目标时,@interjay 是正确的,您的整个函数可以通过使用
.any()
来更好地表达: