You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中if-else语句如何影响函数的返回值规则?

Rust if-else 表达式返回规则说明

首先明确两个Rust的核心基础规则,你遇到的编译差异和这两个规则直接相关,「函数返回最后一条被求值的表达式的值」的规则从来没有被改变:

  1. Rust中的if是表达式而非语句,所有表达式都会求值返回一个值,且同一个表达式的所有分支返回类型必须完全一致。
  2. 不带else的if表达式存在隐含的else分支,该分支默认返回单元类型()(可以理解为其他语言的空返回值void)。

第一个无else的代码编译失败原因

你的代码中if分支的最后一个表达式是number + 1,返回类型为u64,但隐含的else分支返回(),两个分支类型不匹配,直接触发了if表达式的类型校验错误,还没有轮到函数返回规则生效。

如果你希望这段代码能编译通过,只需要把if块内的表达式末尾加上分号,主动丢弃它的返回值,让if块的返回值变为(),就能和隐含else分支的类型匹配:

fn return_numbere(number: u64) -> u64 {
    if (number > 40) {
        number + 1; // 加;后该表达式返回()
    } 

    number - 1
}

这时候函数返回的就是最后一个表达式number -1的值,完全符合你已知的基础规则。

第二个带else的代码编译成功原因

当你显式添加else分支后,隐含的else分支会被覆盖,此时if分支返回u64类型的number +1,else分支返回u64类型的number -1,两个分支类型完全匹配,整个if-else表达式的返回类型就是u64。
同时这段代码中if-else是函数的最后一个表达式,所以它的求值结果直接作为函数返回值,没有修改任何基础规则。


内容的提问来源于stack exchange,提问作者Enrique Ortiz Casillas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:04