我正在尝试进行沙沙声课程,但我不明白以下代码出现的错误:
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
}
b
}
Run Code Online (Sandbox Code Playgroud)
错误:
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
}
b
}
Run Code Online (Sandbox Code Playgroud)
如果我添加返回值,它确实有效,但上面的方法不应该也有效吗?如果我使用 if-else 也可以:
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}
Run Code Online (Sandbox Code Playgroud)
Net*_*ave 11
在 rust 中,仅将最后一个表达式作为返回值。
在你的情况下:
if a > b {
a
}
Run Code Online (Sandbox Code Playgroud)
和:
b
Run Code Online (Sandbox Code Playgroud)
表达式本身就是表达式,那么它应该返回哪一个呢?事实上,if没有子句的表达式在 Rust 中else返回()(这就是类型冲突的原因)。如需更多参考,请参阅此问题。
同时:
if a > b {
a
} else {
b
}
Run Code Online (Sandbox Code Playgroud)
是单个表达式,其分支也是单个表达式 (a和b)。因此很明显,它应该返回表达式内部返回的内容if。
另外,您可以在表达式中使用return 语句if来帮助编译器实现在第一种情况下要做什么(来自 @Cerberus 的评论:return x也是一个表达式 - 它的计算结果为 never,因此可以在任何地方使用而不会出现类型不匹配的情况) . ):
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
return a;
}
b
}
Run Code Online (Sandbox Code Playgroud)
仅最后一个b表达式将用作最终返回(其他返回是语句,而不是表达式)。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |