我正在尝试通过从Rust的书中学习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语言书中,声明了编译器检查if-else块中所有表达式的类型,但还声明如果不存在else语句,它将传递到下一行代码。既然我说过返回类型将是i32,那么编译器如何能期望错误中看到类型“()”?