Windows -编程-变量和可变性-阴影
正如您 在第 2 章“比较猜测与秘密数字”部分的猜谜游戏教程中所见,您可以声明一个与前一个变量同名的新变量。Rustaceans 说第一个变量被第二个变量遮蔽,这意味着第二个变量的值是使用该变量时出现的值。我们可以通过使用相同的变量名并重复使用let关键字来隐藏变量,如下所示:诚接Windows驱动开发外包
文件名:src/main.rs
fn main() {
let x = 5;
let x = x + 1;
let x = x * 2;
println!(“The value of x is: {}”, x);
}
该程序首先绑定x到 的值5。然后它x通过重复let x =进行阴影处理,取原始值并相加,1因此 的值为 xthen 6。第三个let语句也是阴影x,将前一个值乘以2给出x最终值12。当我们运行这个程序时,它会输出以下内容:
$ cargo run
Compiling variables v0.1.0 (file:///projects/variables)
Finished dev [unoptimized + debuginfo] target(s) in 0.31s
Running target/debug/variables
The value of x is: 12
阴影与将变量标记为 不同mut,因为如果我们不小心尝试在不使用let关键字的情况下重新分配给该变量,我们将收到编译时错误。通过使用let,我们可以对一个值执行一些转换,但在这些转换完成后变量是不可变的。
mut和隐藏之间的另一个区别是,因为当我们let再次使用关键字时,我们有效地创建了一个新变量,所以我们可以更改值的类型但重用相同的名称。例如,假设我们的程序要求用户通过输入空格字符来显示他们想要在某些文本之间有多少空格,但我们真的想将该输入存储为数字:
let spaces = " ";
let spaces = spaces.len();
这种构造是允许的,因为第一个spaces变量是字符串类型,而第二个spaces变量是一个全新的变量,碰巧与第一个变量同名,是一个数字类型。因此,阴影使我们不必想出不同的名称,例如spaces_str和 spaces_num;相反,我们可以重用更简单的spaces名称。但是,如果我们尝试使用mut它,如下所示,我们将得到一个编译时错误:
let mut spaces = " ";
spaces = spaces.len();
错误说我们不允许改变变量的类型:
$ cargo run
Compiling variables v0.1.0 (file:///projects/variables)
error[E0308]: mismatched types --> src/main.rs:3:14
|
3 | spaces = spaces.len();
| ^^^^^^^^^^^^ expected &str
, found usize
error: aborting due to previous error
For more information about this error, try rustc --explain E0308
.
error: could not compile variables
To learn more, run the command again with --verbose.
既然我们已经探索了变量的工作原理,让我们看看它们可以拥有的更多数据类型