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

分类: 计算机技术
推荐阅读:
Matlab如何设置默认工作目录? 要设置 MATLAB 的默认工作目录,可以按照以下步骤进行操作:
什么是可打印字符? 可打印字符是指在文本中可以显示和输出的字符,包括字母、数字、标点符号和一些特殊符号。根据ASCII编码标准,ASCII码范围内的可打印字符的值为 32(空格)到 126(波浪号)。
Python str()函数 str() 函数用于将指定的对象转换为字符串类型。如果对象已经是字符串类型,则返回对象本身;否则,会调用对象的 __str__() 方法来进行转换。
Python计算二阶行列式的值 本文将使用Python语言编写程序计算二阶行列式的值;
Rust获取代码的运行时间 在 Rust 中,你可以使用 std::time::Instant 模块来测量代码的运行时间。以下是一个简单的示例代码,演示如何在 Rust 中测量代码的运行时间:
通过两个已知点,找出直线(y = kx + b)的方程式 解决方程组 y1 = kx1 + b和y2 = kx2 + b;其中x1,y1,x2,y2是已知变量;k和b是要找到的系数。