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

当一个选项要么没有,要么内在价值满足某些条件时,惯用的做法是什么?

闻人思聪
2023-03-14

有没有一种更惯用的方式来表达以下内容?

fn main() {
    let mut foo: Option<u8> = None;
    match foo {
        Some(foo_val) if ! foo_val < 5 /* i.e. the negation of my acceptance condition */ => {}
        _ => { foo.replace(5); }
    }
}

大多数情况下,似乎有一种替代方法可以替代没有任何作用的手臂,但我一直无法找到一种适用于这种特殊情况的手臂。

我想说的是更直接的if-foo。_none()| |/*是提取和测试内部值的某种方法*/{…} ,或者是一些我无法理解的链接技巧。


共有3个答案

田普松
2023-03-14

你可以这样做:

if foo.unwrap_or(0) < 5 {
    ...
}

以上两种情况都是正确的:

  • fooSome时,其值小于5
  • fooNone

在一些更复杂的场景中,需要计算“缺省值”和性能是至关重要的,您可能需要考虑<代码> unRePAPRORESORE < /COD>。

郭志泽
2023-03-14

我不确定我是否完全理解你的问题,但你可以尝试这样的方式:

fn main() {
    let foo: Option<u8> = None;
    let result = foo.filter(|foo_val| !(*foo_val < 5) ).unwrap_or(5);
    println!("Result: {result}");
}

更多关于操场的例子

茹康裕
2023-03-14
//        in None case
//             │       in Some(_) case
//            ┌┴─┐  ┌───────────────────┐    
if foo.map_or(true, |foo_val| foo_val < 5) {
    // ...
}

有关更多信息,请参阅选项::映射或

 类似资料:
  • 问题内容: 这是我要弄清楚的一个片段: 有一个接受来自外部的事件。有一个订阅该主题的客户端,可以处理事件并对其进行处理。这里的主要思想是,应基于使用流中的项目计算出的某些条件,每次都发出缓冲的项目。 为此,缓冲区边界本身会监听主体。 一项重要的期望行为:每当边界发射该项目时,也应将其包括在以下的发射中。当前配置不是这种情况,因为该项目(至少是我认为的)是 在 它到达 之前 从关闭选择器发出的,因此

  • 我试图从我的数据框中得到不同健康状况的男性和女性的平均年龄。 我可以得到平均年龄单独使用 但是有没有一种更雄辩的方法将它们全部汇总到一个表中,以便平均年龄的输出显示为 非常感谢。

  • 本文向大家介绍formData主要是用来做什么的?它的操作方法有哪些?相关面试题,主要包含被问及formData主要是用来做什么的?它的操作方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 利用 FormData 对象,可以通过 JavaScript 键值对来模拟一系列表单控件,还可以使用 XMLHttpRequest的 方法来异步提交表单。

  • 我们知道在Spark中有三种类型的连接——广播连接、随机连接和排序合并连接: 当小表连接大表时,使用广播加入; 当小表大于广播加入阈值时,使用随机连接; 当大表连接,并且连接键可以排序时,使用排序-合并连接; 如果存在两个大表的连接并且无法对连接键进行排序,会发生什么情况?Spark 将选择哪种联接类型?

  • 问题内容: 我正在尝试使用此命令安装Python软件包 我收到权限错误,不确定为什么。我可以使用来运行它,但是有人告诉我这是个坏主意,我应该改用virtualenv。 什么是虚拟环境?它对我有什么作用? 问题答案: 与系统Python和库一起运行会将您限制为OS提供商选择的一个特定Python版本。试图在一个Python安装上运行所有Python应用程序,可能会导致库集合之间发生版本冲突。对系统P

  • 我有一个数组,我需要从它的名字移除一个元素。当我输入一个想要删除的杂志名称时,控制台会调用一个输入行,我在里面放什么并不重要,我甚至可以按下一个即时回车键。