Rust从入门到实战系列二十一:关键字

变量和可变性ch03-01-variables-and-mutability.mdcommit 059f85014f2a96b7a2dcdc23e01c87ae319873bc正如第二章中” 使用变量储存值” 部分提到的那样,变量默认是不可改变的(immutable)。这是 Rust 提供给你的众多优势之一,让你得以充分利用 Rust 提供的安全性和简单并发性来编写代码。不过,你仍然可以使用可变变量。让我们探讨一下 Rust 为何及如何鼓励你利用不可变性,以及何时你会选择不使用不可变性。当变量不可变时,一旦值被绑定一个名称上,你就不能改变这个值。为了对此进行说明,使用cargo new variables 命令在 projects 目录生成一个叫做 variables 的新项目。接着,在新建的 variables 目录,打开 src∕main.rs 并将代码替换为如下代码,这些代码还不能编译,我们会首次检查到不可变错误(immutability error)。

保存并使用 cargo run 运行程序。应该会看到一条错误信息,如下输出所示:

(file:///projects/variables)error[E0384]: cannot assign twice to immutable variable `x`--> src/main.rs:4:5|2 | let x = 5;| -| || first assignment to `x`| help: consider making this binding mutable: `mut x`3 | println!("The value of x is: {}", x);4 | x = 6;| ^^^^^ cannot assign twice to immutable variableFor more information about this error, try `rustc --explain E0384`.error: could not compile `variables` due to previous error

这个例子展示了编译器如何帮助你找出程序中的错误。虽然编译错误令人沮丧,但那只是表示程序不能安全的完成你想让它完成的工作;并 不能说明你不是一个好程序员!经验丰富的 Rustacean 们一样会遇到编译错误。错误信息指出错误的原因是 不能对不可变变量 x 二次赋值(cannot assign twice to immutable variable ‘x‘ ),因为你尝试对不可变变量 x 赋第二个值。在尝试改变预设为不可变的值时,产生编译时错误是很重要的,因为这种情况可能导致 bug。如果一部分代码假设一个值永远也不会改变,而另一部分代码改变了这个值,第一部分代码就有可能以不可预料的方式运行。不得不承认这种 bug 的起因难以跟踪,尤其是第二部分代码只是 有时会改变值。
变量和可变性 57Rust 编译器保证,如果声明一个值不会变,它就真的不会变,所以你不必自己跟踪它。这意味着你的代码更易于推导。不过可变性也是非常有用的,可以用来更方便地编写代码。变量只是默认不可变;正如在第二章所做的那样,你可以在变量名之前加 mut 来使其可变。mut 也向读者表明了其他代码将会改变这个变量值的意图。例如,让我们将 src∕main.rs 修改为如下代码:

现在运行这个程序,出现如下内容:
```$ cargo runCompiling variables v0.1.0 (file:///projects/variables)Finished dev [unoptimized + debuginfo] target(s) in 0.30sRunning target/debug/variables`The value of x is: 5The value of x is: 6

通过 mut,允许把绑定到 x 的值从 5 改成 6。除了防止出现 bug 外,还有很多地方需要权衡取舍。例如,使用大型数据结构时,适当地使用可变变量,可能比复制和返回新分配的实例更快。对于较小的数据结构,总是创建新实例,采用更偏向函数式的编程风格,可能会使代码更易理解,为可读性而牺牲性能或许是值得的。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值