当前位置: 首页 > 知识库问答 >
问题:

选择第一个Some()选项的惯用方法?

佟寒
2023-03-14

如果我有许多选项

我天真的做法:

pub fn pick_first_option_available<T>(a: Option<T>, b: Option<T>, c: Option<T>) -> Option<T> {
    match a {
        Some(a) => Some(a),
        None => match b {
            Some(b) => Some(b),
            None => match c {
                Some(c) => Some(c),
                None => None,
            },
        },
    }
}

上面提到的一个明显问题是,它仅限于固定数量的选项(3)。我希望有一个更通用的函数。

这里有一个有点相关的线索,但它处理的是求和,而不是选择选项。


共有2个答案

贺宏逸
2023-03-14

作为@DenysSeguret答案,您甚至可以将其抽象为通用数量的选项:

use std::array;


pub fn pick_first_option_available<T, const N: usize>(options: [Option<T>; N]) -> Option<T> {
    array::IntoIter::new(options).reduce(Option::or).flatten()
}

游戏场

此外,它看起来不受欢迎,但仍然是一种方法,而不是使用简单循环的Option::或

use std::array;

pub fn pick_first_option_available<T>(a: Option<T>, b: Option<T>, c: Option<T>) -> Option<T> {
    for option in array::IntoIter::new([a, b, c]){
        if option.is_some() {
            return option;
        }
    }
    None
}

游戏场

洪子晋
2023-03-14

是的,有一个简单而惯用的方法:

a.or(b).or(c)

你通常不会仅仅为此定义一个函数。

选项#或

 类似资料:
  • 我有两个表和 names表有以下列表: -男性姓名从nameID 1到nameID 10 -女性姓名从nameID 11到nameID 21 -两者都从nameID 23到nameID 31 性别表有三个属性: -女性 -男性 -两者 我正在使用引导选择选项,我想显示从nameID11到nameid21的名称,如果用户从gender选择选项中选择女性,等等,这是可能的吗?我看到其他帖子,我注意到他

  • 问题内容: 我有两个选择: 如果我首先选择“水果”,该如何使用jQuery?第二个选择仅向我显示水果- 香蕉,苹果,橙子。如果我在第一个选择中选择“鸟”,则第二个选择仅显示“鸟”-老鹰,鹰。等等… 我试图用这段jQuery代码来做到这一点: 不幸的是,它几乎删除了所有内容,而且我不知道如何恢复一些选择。我也阅读了一些有关克隆的内容,但是在这种情况下我不知道如何使用它。 问题答案: $(“#sele

  • 问题内容: 我得到了一个看起来像这样的select元素,现在我想将其打开并选择值为t3的选项,因此我尝试了如下操作: 现在,这将打开菜单,但没有选择选项标签,我想到了使用select()而不是click(),但还不支持select(),或者至少是我尝试使用该方法时收到的消息。我运行以下扩展PHPUnit_Extensions_Selenium2TestCase。 问题答案: 这是相对简单的。 这应

  • 问题内容: 也许这是一个简单的问题,也许不是。我有一个选择框,在其中我用宽度进行硬编码。说120像素。 我希望能够显示第二个选项,以便用户可以看到文本的完整长度。 像其他一切一样。这在Firefox中可以正常工作,但不适用于Internet Explorer6。 问题答案: 如果您可以使用固定方式中预先存在的选项,而又不想通过编程方式更改宽度,那么除非有一点创意,否则可能会很不幸。 您可以尝试将属

  • 问题内容: 我正在使用实质性的UI Select组件,并且试图在内部构建过滤器以仅显示与用户输入的内容匹配的项目。 我为正在开发的内容构建了一个最小的示例。 现在我的问题是,默认情况下,选择组件允许用户按下任何字母,并且如果存在第一个字母与用户输入匹配的选项,它将选择该选项。 所以,如果我有3个选项(,和)和用户类型选择部件将选择选项,我的文本字段不会改变的价值。但是,如果用户键入,则文本字段将更

  • 问题内容: 我有一个选择元素,其中包含多个项目。我想更改其第一项的颜色,但似乎仅在单击选择下拉菜单时才会显示颜色。我想要的是在加载页面时更改颜色(例如灰色),以便用户可以看到第一个选项的颜色是不同的。 CSS: HTML: 问题答案: 那这个呢: