Rust中的变量、常量和可变性

Rust默认情况下变量是不可变的;注意这里不可变的变量并不是常量,有编程经验的朋友可能会觉得一头雾水,让我们继续往下看;

看一段代码:

fn main() {

    let x = 1; //使用 let 关键字声明变量并赋值
    println!("the value of x is : {}",x);
    x = 6;
    println!("the value of x is : {}",x);

}

这段看似很平常的代码会造成编译错误:error[E0384]: cannot assign twice to immutable variable `x`

rust E0384,cannot assign twice to immutable variable `x`

出现这个错误是以为你试图为一个不可变的变量赋值;

为什么会被设计成这样呢?如果我们代码的一部分假设一个值永远不会改变,而我们代码的另一部分则改变了该值,那么代码的第一部分可能不会按照设计的意图去执行;实际上,这种错误的原因可能很难追查;

变量仅在默认情况下是不可变的,你可以通过在变量名前添加 mut 关键字来使变量可以改变;不仅如此,它还能让你的代码更具有阅读性,mut 是 mutable 的缩写,意为可变的;

修改前面的代码:

fn main() {

    let mut x = 1; //使用 let 关键字声明变量并赋值
    println!("the value of x is : {}",x);
    x = 6;
    println!("the value of x is : {}",x);

}

编译这段代码并执行,将得到以下信息:

the value of x is : 1
the value of x is : 6

变量和常量之间的差异

无法更改的变量可能使你想起其它编程语言都具有的另一个概念:常量;

与不可变的变量一样,常量也是不允许更改的值,但它们之间存在一些差异:

首先,常量不允许使用 mut 关键字;默认情况下,常量是始终不可变的,而变量通过使用mut关键值能使其可以改变;

常量使用 const 关键字声明,而变量使用 let 关键字声明,且常量的值必须指定数据类型,而变量可以推断出其类型;

常量可以在任何范围内声明,包括全局范围;常量只能设置为固定值或常量表达式,在编译时就能计算出其结果;

常量的命名必须使用大写字母或数字和下划线;

const U_X2 :u32 = 100_1000; //在数字中插入下划线可提高可读性

遮蔽

不同于C语言,rust允许你声明一个已经声明过的变量名,并且该新变量会覆盖先前的变量,并且改变其类型,这点上有点像Python;

来看一段代码:

fn main() {
    let x = 5;

    let x = x + 1;

    let x = x * 2;

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

x 最终的值为 12;

这有点像使用mut关键字,但它们是不同的,如果你尝试不适用let关键字修改x,将产生编译错误;

和mut的另一个区别是,使用let再次声明变量时能改变值的类型:

fn main() {
    let strings = "abcdefg";
    let strings = strings.len(); // .len()获取字符串长度
    println!("{}",strings);
}

第一个strings变量为字符串类型,第二个变量为数字类型;而使用mut关键字声明的变量不允许修改其类型:

let mut strings = "abcdefg"; 
strings = strings.len(); 

这段代码将造成编译错误error[E0308] : mismatched types,该错误表明类型不匹配。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/rust-variables-constants-and-mutability.html

分类: 计算机技术
推荐阅读:
Python breakpoint()函数详细教程 brekpoint()函数是python3.7版本新增的一个内置函数;该函数会在调用时使程序进入调试器中;
Python计算n阶行列式的值 本文将使用Python编写程序计算n阶行列式的值,不借助第三方库;
Golang中结构体方法的定义和使用 本文将详细的描述在Go语言中如何定义方法,以及如何使用它;阅读本文可能需要一点Go语言基础以及结构体的知识;
PySide6 QKeyEvent:键盘事件类 QKeyEvent是PySide6中用于表示键盘事件的类,用于处理与键盘相关的用户输入事件,如按键、释放等;
Python eval()函数 在Python中,eval()是一个内置函数,用于将一个字符串作为Python表达式执行,并返回表达式的结果。
如何查看硬盘序列号(S/N) 要在Windows系统上查看硬盘序列号只需要打开命令提示符【CMD】,运行以下命令:wmic diskdrive get model,serialnumber;黄色部分是你的硬盘名称,红色部分则是硬盘序列号;