是否有内置的“Or”函数可以在 Rust 闭包中使用?

问题描述 投票:0回答:1

我编写了以下 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
}

这是一个“或”函数。人们可能期望已经有一个内置函数可以用作闭包的一部分。

有这样的事吗?

rust closures
1个回答
0
投票

直接解决标题,标准库中没有命名函数来表达

||
运算符。其他运算符可以命名为
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)
}
© www.soinside.com 2019 - 2024. All rights reserved.