syntax - 是否有一些语法糖可以在深度嵌套的选项和结果链上进行匹配?
问题描述
我发出的调用返回一个Option
包含一个Result
包含另一个Option
包含自定义变体的一个。
我只对这样的特定变体结果链感兴趣:
if let Some(Ok(Some(CustomVariant(Some(value))))) = expr {
// handle value case
}
这变得非常冗长并且没有真正的帮助,因为我实际上Result
在我的所有代码中都将它视为一个单一的。我可以以某种方式为这段代码加上别名,这样我就可以做类似的事情,而不是编写整个Option
s 和s 链:Result
alias TheCase(value) = Some(Ok(Some(CustomVariant(Some(value))));
if let TheCase(value) = expr {
//handle value
}
解决方案
您不需要这样的别名,只需使用一个函数来检索您想要的一个案例:
fn oneCaseICareAbout(value: &Option<Result<Option<Foo>, Bar>>) -> Option<&Foo> {
if let Some(Ok(Some(CustomVariant(Some(value)))) = value {
Some(value)
} else {
None
}
}
if let Some(value) = oneCaseICareAbout(expr) {
//handle value
}
但是,我会考虑重构您的代码以不使用这种类型。Option<Result<_, _>>
已经是红旗了,却Some(Ok(Some(CustomVariant(Some(…))))
只是在精神错乱的边缘!
推荐阅读
- ios - 在 Swift 中渲染 GIF 图像会导致大量内存使用?
- python - 找到最小的数字及其索引
- html - 初学者,如何在与 HTML 文件不同的文件中添加 CSS?
- python - 使用 DateTimeIndex 为随机时间增量值创建 empy pandas DataFrame
- windows - Read-Host 总是以冒号结尾
- python-3.x - 嵌套文件夹结构中的 excel 工作表中的递归数据抓取
- java - Spring Boot以自己的对象为键返回Map的问题
- python - 在熊猫中附加带有 value_counts() 的列
- python - 将 Jupyter 笔记本作为模块导入,但允许检查
- java - 如何从java中的字节数组中获取每个字节的8位?