是否有一些语法糖用于在深层嵌套的Option和Result链上进行匹配?

Kri*_*fer 0 syntax rust

我发出的回调Option包含一个Result包含另一个Option包含自定义变体的调用.
我只对这样的特定变量结果链感兴趣:

if let Some(Ok(Some(CustomVariant(Some(value))))) = expr {
    // handle value case
}
Run Code Online (Sandbox Code Playgroud)

这变得非常冗长,并没有真正的帮助,因为我实际上将它视为Result我所有代码中的单个.我可以以某种方式为这段代码添加别名,这样我就可以做类似的事情而不是编写整个Options和Results 链:

alias TheCase(value) = Some(Ok(Some(CustomVariant(Some(value))));
if let TheCase(value) = expr {
    //handle value
}
Run Code Online (Sandbox Code Playgroud)

mca*_*ton 8

你不需要这样的别名,只需使用一个函数来检索你想要的一个案例:

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
}
Run Code Online (Sandbox Code Playgroud)

但是我会考虑重构你的代码而不是使用这种类型.Option<Result<_, _>>已经是一面红旗,但Some(Ok(Some(CustomVariant(Some(…))))只是处于疯狂的边缘!