Rust 通过if语句的变量绑定工作不正常

Rust 通过if语句的变量绑定工作不正常,rust,rust-cargo,Rust,Rust Cargo,我写了这段代码: let x = 5; let y = if x == 5 { 10 } else { println!("shapoopoy"); }; 当我使用cargo build编译时,我得到错误: 错误[E0308]:if和else具有不兼容的类型 -->src/main.rs:6:9 | 3 |设y=x=5{ | _____________- 4 | | 10 ||——正因为如此,这是意料之中的 5 | |}其他{ 6 | | println!(“

我写了这段代码:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};
当我使用
cargo build
编译时,我得到错误:

错误[E0308]:if和else具有不兼容的类型
-->src/main.rs:6:9
|
3 |设y=x=5{
|  _____________-
4 | |         10
||——正因为如此,这是意料之中的
5 | |}其他{
6 | | println!(“shapoopoy”);
|| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^所需的整数,已找到()
7 | |     };
|| uuuuuuuuuuuuuuuuuuuuuif和else具有不兼容的类型
|
=注意:应为类型`{integer}`
找到类型“%1”()`

另一方面,若我计划在学习了Rust之后再做一个项目,我应该坚持使用稳定版本吗?如果我使用的是旧版本,我不确定如何将Rust包含在我制作的程序中。

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

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};
y
的类型是什么?第一个分支解析为某个整数变量(如
u8
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并使用它进行编译。

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

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};
y
的类型是什么?第一个分支解析为某个整数变量(如
u8
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并使用它进行编译。

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

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};
y
的类型是什么?第一个分支解析为某个整数变量(如
u8
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并使用它进行编译。

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

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};
y
的类型是什么?第一个分支解析为某个整数变量(如
u8
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并使用它进行编译。

无论如何,我已经做过几次了,对于这不是一个错误感到非常不安,所以我很高兴看到这一点
y
不能等于
println!()
除非它的返回值毕竟是一个整数。据我记忆所及,这从来都不起作用。你能说它什么时候起作用吗?我明白了。我以为它会打印出来!()仅当y不等于5@JohnC你能提供一个代码编译时间的例子吗?@Shepmaster看着我的代码,我想我在早期版本的
match
中记错了。值得一提的是,我已经做了几次了,对于这不是一个错误感到非常不安,所以我很高兴看到这一点
y
不能等于
println!()
除非它的返回值毕竟是一个整数。据我记忆所及,这从来都不起作用。你能说它什么时候起作用吗?我明白了。我以为它会打印出来!()仅当y不等于5@JohnC你能提供一个代码编译时间的例子吗?@Shepmaster看着我的代码,我想我在早期版本的
match
中记错了。值得一提的是,我已经做了几次了,对于这不是一个错误感到非常不安,所以我很高兴看到这一点
y
不能等于
println!()
除非它的返回值毕竟是一个整数。据我记忆所及,这从来都不起作用。你能说它什么时候起作用吗?我明白了。我以为它会打印出来!()仅当y不等于5@JohnC你能提供一个代码编译时间的例子吗?@Shepmaster看着我的代码,我想我在早期版本的
match
中记错了