Rust 为什么可以';t returns推断返回的类型,我必须显式返回而不是使用闭包?
我在做基本的练习:Rust 为什么可以';t returns推断返回的类型,我必须显式返回而不是使用闭包?,rust,Rust,我在做基本的练习: pub fn biger(a:i32,b:i32)->i32{ 设最大=如果a>b{a}否则{返回b}; } 编译器报告一个错误: 错误[E0308]:类型不匹配 -->src/lib.rs:1:34 | 1 | pub fn biger(a:i32,b:i32)->i32{ |----^^^^应为'i32',找到'()` | | |隐式返回“()”,因为它的主体没有尾部或“return”表达式 我不明白编译器为什么会找到一个()。据我所知,既然闭包在最大值
pub fn biger(a:i32,b:i32)->i32{
设最大=如果a>b{a}否则{返回b};
}
编译器报告一个错误:
错误[E0308]:类型不匹配
-->src/lib.rs:1:34
|
1 | pub fn biger(a:i32,b:i32)->i32{
|----^^^^应为'i32',找到'()`
| |
|隐式返回“()”,因为它的主体没有尾部或“return”表达式
我不明白编译器为什么会找到一个()
。据我所知,既然闭包在最大值中返回a
或b
,我是否应该更改代码(例如,在后面添加最大值或最大值;或者基本上返回a或b)
问题出在哪里?如果我通过添加一行返回最大值
,它将按预期编译。为什么编译器无法推断返回类型
是否让
返回一些内容?我知道我错过了一些内容,但似乎明白了什么
这里的目标是了解Rust在做什么,因为我觉得我无法掌握一些概念,也没有尽可能最好的代码。让我们了解您的代码,以便更清楚地了解发生了什么
pub fn bigger(a: i32, b: i32) -> i32 {
let biggest = if a > b { a } else { return b };
}
您正在创建一个名为最大的
的本地范围绑定。如果a>b
它的值将为a
,否则函数将返回b
因此,对于a>b
,此函数没有隐式或显式返回值
在此函数中,不需要显式命名的maxist
绑定。您可以使用Rust的隐式返回属性:
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}
我要提到的是,此函数相当于标准库中的函数。补充:
为什么编译器无法推断返回类型
不是。它告诉你你的类型不匹配:你声明biger
返回一个i32
,但它不匹配
是否让
返回某些内容
不,let
是一个语句
我知道我错过了什么,但似乎明白了什么
让
做它自己的事情。因为之后什么都没有,执行“从”函数的末尾“落下”,它不返回任何东西,因此隐式返回()
(这正是编译器告诉您的)
由于这与声明的返回类型i32
不匹配,因此会出现编译错误。此代码中没有闭包。