首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在让绑定中不允许顶级或-模式?

为什么在让绑定中不允许顶级或-模式?
EN

Stack Overflow用户
提问于 2022-01-31 16:38:25
回答 1查看 172关注 0票数 1
代码语言:javascript
复制
fn foo(ok: bool) -> Result<i32, i32> {
    if ok { Ok(0) } else { Err(0) }
}

fn main() {
    let Ok(x) | Err(x) = foo(true); // rust-analyzer error: top-level or-patterns are not allowed in `let` bindings

    if let Ok(x) | Err(x) = foo(true) { // rust-analyzer warn: irrefutable `if let` pattern
        println!("Working!");
    }
}

或者这是生锈分析器的问题?我试着在谷歌上搜索,但什么也找不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 16:53:23

不允许使用顶级或-模式的原因是因为it would cause certain macro_rules! macros中断了。let表达式中的模式应该可以由单个$p:pat匹配,但不需要使用括号,$p:pat只会使用或模式的第一部分。

请注意,您可以轻松地处理此问题,正如编译器在尝试以下操作时所建议的那样:

代码语言:javascript
复制
error: top-level or-patterns are not allowed in `let` bindings
 --> src/main.rs:6:9
  |
6 |     let Ok(x) | Err(x) = foo(true);
  |         ^^^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(Ok(x) | Err(x))`

将或-表达式包装在括号中可以修复这个问题,因为现在一个括号表达式是顶级表达式:

代码语言:javascript
复制
let (Ok(x) | Err(x)) = foo(true);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70929552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档