首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法问题:返回匹配{}中的catch-all值

语法问题:返回匹配{}中的catch-all值
EN

Stack Overflow用户
提问于 2021-06-17 15:08:44
回答 1查看 622关注 0票数 2

一个简单的语法问题,但不能谷歌它。

例如,我想编写一个返回i值的函数,但是如果是i == 5,它应该返回0。我能把它写成一个match吗?

代码语言:javascript
复制
fn get_i(i: i32) -> i32 {
    match i {
        5 => 0,
        _ => ???,
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 15:23:13

对于您的特定示例,确实有一个更简单的解决方案,如评论中所指出的:

代码语言:javascript
复制
fn get_i(i: 32) -> i32 {
  if i == 5 {
    0
  } else {
    i
  }
}

但是假设您有一个更复杂的模式,我想您的问题是在这种情况下如何返回catch值。

就模式而言,_没有什么特别之处。你也可以使用任何其他符号。所以你可以直接写

代码语言:javascript
复制
fn get_i(n: i32) -> i32 {
    match n {
        5 => 0,
        i => i,
    }
}

这是因为如果左侧的模式只是一个名称,它将匹配任何内容并将其绑定到该名称。

您可以在左边使用任何变量名,这是一个有效的变量名,然后在模式的右侧使用。

当您使用_时也会发生同样的情况,只是在不实际使用以_开头的变量时,Rust不会警告您。这就是为什么当_只返回与实际输入无关的缺省值时,它经常用于catch模式,但没有理由不能使用另一个变量名。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68021997

复制
相关文章

相似问题

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