rust - 如何检查两个变量是否都是 Some?
问题描述
我对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,如果这是您想要做的)。
推荐阅读
- javascript - 使用 Javascript 填写 iframe 中包含的表单
- for-loop - Vue2:在 v-for 循环内更改数据
- git - 将 git 存储库迁移到另一个
- python-3.x - 在python3中对列表进行排序并重新排列
- javascript - 无法在具有匿名函数的函数中使用“this”
- sql-server - MSSQL:如何获取读表的统计信息?
- julia - 在函数中解压 dict 条目
- java - 是否可以纯粹使用 poi excel 创建依赖下拉列表
- android - Android Studio:通过第三方迁移到 AndroidX
- java - java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()