【发布时间】:2019-11-29 01:40:42
【问题描述】:
我试图通过从书中学习 Rust 来学习它。最常见的东西,上面有有趣的补充。我尝试编写一些代码来适应它,所以我决定按照本章所述做,并编写一个快速的斐波那契函数,但出现了一个错误,我遇到了问题。任何防锈专家都会向我解释为什么会发生这种情况及其背后的逻辑。
fn fibo(x: i32) -> i32 {
if x == 0 {
0
}
else if x == 1 {
1
}
fibo(x-1) + fibo(x-2)
}
当我尝试构建此代码时,我收到以下错误;
error[E0308]: mismatched types
--> src/main.rs:6:9
|
6 | 0
| ^ expected (), found integer
|
= note: expected type `()`
found type `{integer}`
error[E0308]: mismatched types
--> src/main.rs:9:9
|
9 | 1
| ^ expected (), found integer
|
= note: expected type `()`
found type `{integer}`
但如果我将代码更改为以下代码,它就可以正常工作;
fn fibo(x: i32) -> i32 {
if x == 0 {
0
}
else if x == 1 {
1
}else{
fibo(x-1) + fibo(x-2)
}
}
Rust Language 书中指出,编译器会检查 if-else 块中所有表达式的类型,但如果不存在 else 语句,则它会传递到下一行代码。既然我说返回类型是 i32,编译器怎么会期望错误中看到的类型“()”?
【问题讨论】:
-
顺便说一句,在 rust 中,尝试使用 match 而不是 if..else if.
-
@sailfish009 的确,它更强大,但是,在这里他的结果有限,所以
match可能是矫枉过正
标签: function rust return-type