语法问题:return 匹配中的全部值{}
Syntax question: return catch-all value in match{}
一个简单的语法问题,但是google不会。
例如,我想编写一个 return 值为 i
的函数,但如果 i == 5
,它应该 return 0。我可以把它写成一个match
吗?
fn get_i(i: i32) -> i32 {
match i {
5 => 0,
_ => ???,
}
}
对于您的特定示例,确实有一个更简单的解决方案,正如评论中指出的那样:
fn get_i(i: 32) -> i32 {
if i == 5 {
0
} else {
i
}
}
但是假设您有一个更复杂的模式,我想您的问题是在这种情况下您如何 return 包罗万象的价值。
嗯,就模式而言,_
没有什么特别之处。您也可以使用任何其他符号。所以你可以写
fn get_i(n: i32) -> i32 {
match n {
5 => 0,
i => i,
}
}
之所以可行,是因为如果左侧的模式只是一个名称,它将匹配 任何内容 并将其绑定到该名称。
您可以在左侧使用任何有效的变量名,然后在模式的右侧使用它。
当您使用 _
时也会发生同样的情况,只是根据理解和约定,当以 _
开头的变量实际上未被使用时,Rust 不会警告您。这就是为什么你看到 _
经常用于包罗万象的模式,而它只是为了 return 一些与实际输入无关的默认值,但是你没有理由不能使用另一个变量名。
一个简单的语法问题,但是google不会。
例如,我想编写一个 return 值为 i
的函数,但如果 i == 5
,它应该 return 0。我可以把它写成一个match
吗?
fn get_i(i: i32) -> i32 {
match i {
5 => 0,
_ => ???,
}
}
对于您的特定示例,确实有一个更简单的解决方案,正如评论中指出的那样:
fn get_i(i: 32) -> i32 {
if i == 5 {
0
} else {
i
}
}
但是假设您有一个更复杂的模式,我想您的问题是在这种情况下您如何 return 包罗万象的价值。
嗯,就模式而言,_
没有什么特别之处。您也可以使用任何其他符号。所以你可以写
fn get_i(n: i32) -> i32 {
match n {
5 => 0,
i => i,
}
}
之所以可行,是因为如果左侧的模式只是一个名称,它将匹配 任何内容 并将其绑定到该名称。
您可以在左侧使用任何有效的变量名,然后在模式的右侧使用它。
当您使用 _
时也会发生同样的情况,只是根据理解和约定,当以 _
开头的变量实际上未被使用时,Rust 不会警告您。这就是为什么你看到 _
经常用于包罗万象的模式,而它只是为了 return 一些与实际输入无关的默认值,但是你没有理由不能使用另一个变量名。