通过 if 语句绑定的变量无法正常工作

Variable binding through if statement not working correctly

我写了这段代码:

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 包含在我制作的程序中。

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

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

y 类型 是什么?第一个分支解析为某个整数变量(如 u8i32),但第二个分支解析为 println! 的 return 类型,即 () .您不能将 这两种类型存储在一个 space 中,因此编译器会报错。

两个分支都需要解析为相同的类型——这取决于您需要做什么。您可以 return 什么都没有,并将变量设置为副作用:

let x = 5;
let y;

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

或return两个分支中的整数:

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

I'm not sure how to include Rust with the program I make if I do use an older version.

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