一个简单的语法问题,但不能谷歌它。
例如,我想编写一个返回i值的函数,但是如果是i == 5,它应该返回0。我能把它写成一个match吗?
fn get_i(i: i32) -> i32 {
match i {
5 => 0,
_ => ???,
}
}发布于 2021-06-17 15:23:13
对于您的特定示例,确实有一个更简单的解决方案,如评论中所指出的:
fn get_i(i: 32) -> i32 {
if i == 5 {
0
} else {
i
}
}但是假设您有一个更复杂的模式,我想您的问题是在这种情况下如何返回catch值。
就模式而言,_没有什么特别之处。你也可以使用任何其他符号。所以你可以直接写
fn get_i(n: i32) -> i32 {
match n {
5 => 0,
i => i,
}
}这是因为如果左侧的模式只是一个名称,它将匹配任何内容并将其绑定到该名称。
您可以在左边使用任何变量名,这是一个有效的变量名,然后在模式的右侧使用。
当您使用_时也会发生同样的情况,只是在不实际使用以_开头的变量时,Rust不会警告您。这就是为什么当_只返回与实际输入无关的缺省值时,它经常用于catch模式,但没有理由不能使用另一个变量名。
https://stackoverflow.com/questions/68021997
复制相似问题