gpt4 book ai didi

rust - 如何检查两个变量是否都是 Some?

转载 作者:行者123 更新时间:2023-12-03 11:24:01 25 4
gpt4 key购买 nike

我对 Some(T) 感到困惑关键词。

如果定义了值(不是 None ),我想检查两个变量。如果是这种情况,则处理此变量的值。

我知道match像这样工作的模式:

match value {
Some(val) => println!("{}", val),
None => return false,
}

如果我使用这种模式,它会变得非常困惑:
match param {
Some(par) => {
match value {
Some(val) => {
//process
},

None => return false,
}
},

None => return false,
}

这不可能是正确的解决方案。

这是一种可能性,询问参数和值是否 is_some()这会影响这样的代码:
if param.is_some() && value.is_some() {
//process
}

但如果我这样做,我总是要打开 paramvalue访问值。

我想过这样的事情来避免这种情况。但是这段代码不起作用:
if param == Some(par) && value == Some(val) {
//process
}

这个想法是可以通过 par 访问这些值。和 val就像他们在 match版本。

有没有办法做这样的事情?

最佳答案

如果我有几个Option要匹配的值,我匹配值的元组:

enum Color {
Red,
Blue,
Green,
}

fn foo(a: Option<Color>, b: Option<i32>) {
match (a, b) {
(Some(Color::Blue), Some(n)) if n > 10 => println!("Blue large number"),
(Some(Color::Red), _) => println!("Red number"),
_ => (),
}
}

fn main() {
foo(Some(Color::Blue), None);
foo(Some(Color::Blue), Some(20));
}

这允许我匹配有趣的组合,并丢弃其余的(或者返回 false,如果这是你想要做的)。

关于rust - 如何检查两个变量是否都是 Some?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com