我对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
}
但是,如果我那样做,我总是必须拆包param
并value
访问值。
我想到了这样的事情来避免这种情况。但是此代码不起作用:
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)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句