Syntax 在深度嵌套的选项链和结果链上进行匹配时,是否有一些语法糖?

Syntax 在深度嵌套的选项链和结果链上进行匹配时,是否有一些语法糖?,syntax,rust,Syntax,Rust,我发出的调用返回一个包含结果的选项,该结果包含另一个包含自定义变量的选项。 我只对一系列不同结果感兴趣,比如: if let Some(Ok(Some(CustomVariant(Some(value))))) = expr { // handle value case } 这变得相当冗长,而且没有真正的帮助,因为我实际上在我的所有代码中将其作为一个结果处理。我是否可以以某种方式将此代码命名为别名,以便不必编写整个选项和结果链,而可以执行类似的操作: alias TheCase(val

我发出的调用返回一个包含结果的选项,该结果包含另一个包含自定义变量的选项。 我只对一系列不同结果感兴趣,比如:

if let Some(Ok(Some(CustomVariant(Some(value))))) = expr {
    // handle value case
}
这变得相当冗长,而且没有真正的帮助,因为我实际上在我的所有代码中将其作为一个结果处理。我是否可以以某种方式将此代码命名为别名,以便不必编写整个选项和结果链,而可以执行类似的操作:

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
}

不过,我会考虑重构您的代码,而不是使用这样的类型。选择已经是一个危险的信号,但是有些人,有些人,有些人,有些人…正处于疯狂的边缘

我要说的是,选择权并不是一个适当的结构。试着先用塑料袋把它拆开?运算符这不是我想要的,我只是想要一个简短的表达方式,变量的精确组合,因为在这种情况下,我必须做点什么,否则,我不需要ToupPoto,因为我会考虑重构您的代码TIL,我不能张贴+ 1开始的一个comment@hellow这是因为评论你的投票被认为是噪音,可以从网站上删除;哦,相信我,我渴望重塑自己。但实际上我尝试了一下,我无法理解代码库,以至于无法开始重构它。这个结构是从我正在使用的板条箱中的库调用返回的,我希望我有时间和技能重写它。