0

我写了这段代码:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};

当我用 编译时cargo build,出现错误:

error[E0308]: if and else have incompatible types
 --> src/main.rs:6:9
  |
3 |       let y = if x == 5 {
  |  _____________-
4 | |         10
  | |         -- expected because of this
5 | |     } else {
6 | |         println!("shapoopoy");
  | |         ^^^^^^^^^^^^^^^^^^^^^^ expected integer, found ()
7 | |     };
  | |_____- if and else have incompatible types
  |
  = note: expected type `{integer}`
             found type `()`

顺便说一句,如果我打算在学习 Rust 后从事一个项目,我应该坚持使用稳定版本吗?如果我确实使用旧版本,我不确定如何在我制作的程序中包含 Rust。

4

1 回答 1

3

让我们看一下您的示例代码:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};

会是什么类型y?第一个分支解析为某个整数变量(如u8or i32),但第二个分支解析为 的返回类型println!,即(). 您不能将这两种类型存储一个空间中,因此编译器会抱怨。

两个分支都需要解析为相同的类型——这取决于你需要做什么。您可以不返回任何内容,并将变量设置为副作用:

let x = 5;
let y;

if x == 5 {
    y = 10;
} else {
    println!("shapoopoy");
}

或者在两个分支中返回一个整数:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
    42
};

如果我确实使用旧版本,我不确定如何在我制作的程序中包含 Rust。

Rust 是一种编译语言。如果您分发已编译的二进制文件,那么您根本不需要“包含”Rust。如果你选择了一个稳定的版本,那么你总是可以固定到那个版本的 Rust 并使用它进行编译。

于 2015-03-22T22:10:13.130 回答