Windows -编程-变量和可变性

Windows -编程-变量和可变性

默认情况下变量是不可变的。这是 Rust 为您提供的众多推动之一,您可以利用 Rust 提供的安全性和简单的并发性来编写代码。但是,您仍然可以选择使变量可变。让我们探讨一下 Rust 如何以及为什么鼓励您支持不变性,以及为什么有时您可能想要选择退出。

当变量不可变时,一旦值绑定到名称,就无法更改该值。为了说明这一点,让我们产生一个新的项目,称为变量 在你的项目中使用目录cargo new variables。

诚接Windows驱动开发外包

然后,在您的新变量目录中,打开src/main.rs并将其代码替换为以下尚未编译的代码:

文件名:src/main.rs

fn main() {

let x = 5;

println!("The value of x is: {}", x);

x = 6;

println!("The value of x is: {}", x);

}

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

$ cargo run

Compiling variables v0.1.0 (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: make this binding mutable: `mut x`

3 |     println!("The value of x is: {}", x);

4 |     x = 6;

|     ^^^^^ cannot assign twice to immutable variable

error: aborting due to previous error

For more information about this error, try `rustc --explain E0384`.

error: could not compile `variables`

To learn more, run the command again with --verbose.

此示例显示编译器如何帮助您查找程序中的错误。尽管编译器错误可能令人沮丧,但它们仅意味着您的程序还没有安全地执行您希望它执行的操作;他们并不意味着你不是一个好的程序员!有经验的 Rustaceans 仍然会遇到编译器错误。

错误消息表明错误的原因是您cannot assign twice to immutable variable x,因为您尝试为不可变x变量分配第二个值。

当我们尝试更改我们之前指定为不可变的值时,我们会遇到编译时错误,这一点很重要,因为这种情况会导致错误。如果我们的代码的一部分基于值永远不会改变的假设而运行,而我们代码的另一部分更改了该值,则代码的第一部分可能不会执行其设计的目的。这种错误的原因事后很难追查,尤其是当第二段代码只是偶尔更改值时。

在 Rust 中,编译器保证当你声明一个值不会改变时,它真的不会改变。这意味着当您阅读和编写代码时,您不必跟踪值可能发生变化的方式和位置。因此,您的代码更容易推理。

但是可变性非常有用。变量仅在默认情况下是不可变的;正如你在第 2 章所做的那样,你可以通过mut在变量名前面添加来使它们可变。除了允许更改此值之外,还mut通过指示代码的其他部分将更改此变量的值来向代码的未来读者传达意图。

例如,让我们将src/main.rs更改为以下内容:

文件名:src/main.rs

fn main() {

let mut x = 5;

println!("The value of x is: {}", x);

x = 6;

println!("The value of x is: {}", x);

}

当我们现在运行程序时,我们得到:

$ cargo run

Compiling variables v0.1.0 (file:///projects/variables)

Finished dev [unoptimized + debuginfo] target(s) in 0.30s

Running `target/debug/variables`

The value of x is: 5

The value of x is: 6

我们可以更改x绑定到 from5到6whenmut 使用的值。在某些情况下,您需要使变量可变,因为与只有不可变变量相比,它使代码编写起来更方便。

除了防止错误之外,还有多种权衡需要考虑。例如,在您使用大型数据结构的情况下,就地改变实例可能比复制和返回新分配的实例更快。使用较小的数据结构,创建新实例和编写更具功能性的编程风格可能更容易思考,因此降低性能可能是获得这种清晰度的一个值得的惩罚。

(0)

相关推荐

  • Rust中的各种指针

    xtutujs.golang.rust.关注他49 人赞同了该文章Rust 中的指针大体可以分为以下四种:引用 references"胖指针 fat pointers"(该分类存有 ...

  • 延迟执行与不可变,系统讲解JavaStream数据处理

    本文为掘金社区首发签约文章. 最近在公司写业务的时候,忽然想不起来Stream中的累加应该怎么写? 无奈只能面向谷歌编程,花费了我宝贵的三分钟之后,学会了,很简单. 自从我用上JDK8以后,Strea ...

  • 浅谈函数式编程

    函数式编程(Functional Programming)是一种编程风格,它是相对于指令式编程风格而言的,常见的面向对象编程就是指令式编程风格. 指令式编程是面向计算机硬件的抽象,有变量(对应着存储单 ...

  • Rust基础学习笔记(零):复习基本知识

    由于一个学期没有碰Rust,相关知识殆已忘尽.最近各课逐渐停授,余出时间来从基础重温这些知识,也算是对没有写的基础知识的补充.另外这次复习主要参照了Youtube上的Crush Course视频,两个 ...

  • Rust 中的 Closure

    原理 有些语言中没有 closure 和普通函数的区分,但 Rust 有.对 Rust 来说普通函数就是一段代码.而 closure 和 C 类似:每个 closure 会创建一个匿名的struct, ...

  • Windows -编程-变量和可变性-阴影

    Windows -编程-变量和可变性-阴影 正如您 在第 2 章"比较猜测与秘密数字"部分的猜谜游戏教程中所见,您可以声明一个与前一个变量同名的新变量.Rustaceans 说第一 ...

  • Windows -编程-变量和常量之间的差异

    Windows -编程-变量和常量之间的差异 无法更改变量的值可能会让您想起大多数其他语言都有的另一个编程概念:常量.与不可变变量一样,常量是绑定到名称且不允许更改的值,但常量和变量之间存在一些差异. ...

  • Windows -编程-数值运算

    Windows -编程-数值运算 Rust 支持所有数字类型的基本数学运算:加法.减法.乘法.除法和余数.以下代码显示了如何在let语句中使用每一个:诚接Windows驱动开发外包 文件名:src/m ...

  • Windows -编程-数据类型

    Windows -编程-数据类型 Rust 中的每个值都有特定的数据类型,它告诉 Rust 指定了什么样的数据,以便它知道如何处理这些数据.我们将研究两种数据类型子集:标量和复合.诚接Windows驱 ...

  • 【白话Windows编程】第一章 看透Windows之一

    第一篇 看透 Windows"看透Windows"前言终于开始Windows编程了.我们也无可避免地,开始和Windows打交道.记得在<白话C++>里,我们试图用&q ...

  • 学会这两招,PLC编程也可以批量化定义变量-数组、结构

    数组 简单的说,就是多个相同类型数据一定顺序排列的集合,使用一个名字命名,并通过编号的方式对这些数据统一管理. 在PLC编程过程中,我们也经常遇到同类型的变量需要定义,例如10台电机的电流值,如果不使 ...

  • PLC高手编程都会用Slice方式对变量进行寻址

    编程S7-1200可以选择包含所声明变量的特定地址区域,可以访问宽为 1 位.8 位.16 位或 32 位的区域,这种访问类型称之为"片段访问"(Slice access).通过 ...

  • Windows Socket和Linux Socket编程的区别

    SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同.Socket 编程 windows到Linux代码移植遇到的问题1.一些常用函数的移植http://www.vckbase.com/d ...

  • Windows系统路径变量

    %WINDIR%                 {系统目录 - C:\WINDOWS} %SYSTEMROOT%             {系统目录 - C:\WINDOWS} %SYSTEMDRI ...