rust abc(4): 定义变量并使用 mut 关键字

rust abc(4): 定义变量并使用 mut 关键字_第1张图片

文章目录

    • 1. 目的
    • 2. 不可变变量 (immutable variable)
      • 2.1 含义
      • 2.2 代码实例
    • 3. 可变变量 (mutable variable)
      • 3.1 含义
      • 3.2 代码实例
    • 4. 总结

1. 目的

学习 rust 语言中变量的定义方式, 包括普通变量(immutable)、可变变量(mutable)。

本篇博客不涉及引用类型。

2. 不可变变量 (immutable variable)

2.1 含义

rust 语言中定义的变量, 默认是 immutable 类型。啥意思呢?

let a = 1;
let b:i32 = 42;

这样定义的都是 immutable 变量。immutable 指的是取值不能改变。其实可以理解为 C/C++ 中的 const 修饰。 意味着只能在定义时赋值, 定义之外的地方不能修改值,修改就会导致编译报错。

也就是说, 在 rust 语言中, 如下两种定义变量的方式,默认带有 const 属性:

  • let 变量名 = 值; 相当于 C/C++ 的 const auto 变量名 = 值;
  • let 变量名:类型 = 值; 相当于 C/C++ 的 const 类型 变量名 = 值;

2.2 代码实例

d1.rs:

fn main() {
    let a = 1;
    println!("a {}", a);
    a = 2;
    println!("a {}", a);
}

编译运行,的确看到编译报错

zz@Legion-R7000P% rustc d1.rs 
error[E0384]: cannot assign twice to immutable variable `a`
 --> d1.rs:4:5
  |
2 |     let a = 1;
  |         -
  |         |
  |         first assignment to `a`
  |         help: consider making this binding mutable: `mut a`
3 |     println!("a {}", a);
4 |     a = 2;
  |     ^^^^^ cannot assign twice to immutable variable

error: aborting due to previous error

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

3. 可变变量 (mutable variable)

3.1 含义

所谓可变变量, 就是和前面提到的不可变变量相相反的一种情况: 定义时赋值, 然后定义之外的语句中可以修改值(不过数据类型不能改变)。

具体到代码层面, rust 语言提供了关键字 mut. 有两种用法:

  • let mut 变量名 = 值; 相当于 C/C++ 的 auto var = value;
  • let mut 变量名:类型 = 值; 相当于 C/C++ 的 T var = value;

3.2 代码实例

d2.rs

fn main() {
    let mut a = 1;
    println!("a {}", a);
    a = 2;
    println!("a {}", a);
}

编译运行:

zz@Legion-R7000P% rustc d2.rs
zz@Legion-R7000P% ./d2 
a 1
a 2

4. 总结

Rust 的变量定义, 不考虑引用类型的情况下,其实也不复杂,只有这4种情况。对照 C/C++ 写法, 很容易理解。 只不过需要明确的是, rust 变量默认是 immutable 的,相当于 const 的。受到这种影响的话, 其实写 C/C++ 时,也可以每次都加上 const, 避免不必要的修改,在编译器就可以捕获问题。

rust 语法 c/c++ 语法
let 变量名 = 值; const auto 变量名 = 值;
let 变量名:类型 = 值; const 类型 变量名 = 值;
let mut 变量名 = 值; auto var = value;
let mut 变量名:类型 = 值; T var = value;

你可能感兴趣的:(rust,rust,开发语言,后端)