gpt4 book ai didi

rust - 为什么编译器要求我在此处添加 return 语句?

转载 作者:行者123 更新时间:2023-12-04 15:56:24 25 4
gpt4 key购买 nike

我正在尝试学习 ruSTLings 类(class),但我不明白以下代码出现的错误:

pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
}
b
}

错误:

error[E0308]: mismatched types
--> exercises/if/if1.rs:7:9
|
6 | / if a > b {
7 | | a
| | ^ expected `()`, found `i32`
8 | | }
| |_____- expected this to be `()`
|
help: you might have meant to return this value
|
7 | return a;
| ^^^^^^ ^

如果我添加返回,它确实 工作,但上述不应该也工作吗?如果我使用 if-else 它也可以:

pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}

最佳答案

在 rust 中,只有 最后一个表达式 被视为返回值。

在你的情况下:

if a > b {
a
}

和:

b

本身就是表达式,那么它应该返回哪一个呢?事实上,没有 if 表达式和 else 子句在 rust 中返回 () (这就是你得到类型冲突的原因)。更多引用请引用 this answer .

同时:

if a > b {
a
} else {
b
}

是单个表达式,其分支也是单个表达式(ab)。所以很明显它应该返回 if 表达式的内部返回所做的事情。

此外,您可以在 if 表达式中使用 return 语句 来帮助编译器了解在第一种情况下要做什么(来自@Cerberus 评论:return x 也是一个表达式 - 它只是计算为 never,因此可以在任何地方使用而不会出现类型不匹配。):

pub fn bigger(a: i32, b: i32) -> i32 {
if a > b {
return a;
}
b
}

只有最后一个 b 表达式将用作最终返回(其他返回是语句而不是表达式)。

关于rust - 为什么编译器要求我在此处添加 return 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69642017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com