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