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
不匹配,因此会出现编译错误。

此代码中没有闭包。