学习笔记
Git
  • C#
  • F#
  • AspNetCore
  • EF Core
  • WPF
  • Tauri
  • IoTDB
  • Redis
  • Docker
  • Kubernetes
  • RabbitMQ
  • 日志

    • NLog的配置文件
Linux
基础设施
  • Vue

    • Vue基础
VS Code的插件与玩法
Rust
Python
  • Maven
  • Spring Boot
实际项目
我的博客
Git
  • C#
  • F#
  • AspNetCore
  • EF Core
  • WPF
  • Tauri
  • IoTDB
  • Redis
  • Docker
  • Kubernetes
  • RabbitMQ
  • 日志

    • NLog的配置文件
Linux
基础设施
  • Vue

    • Vue基础
VS Code的插件与玩法
Rust
Python
  • Maven
  • Spring Boot
实际项目
我的博客
  • Rust中的变量
  • 数据类型
  • 函数
  • 控制流
  • 所有权
  • 结构体

Rust中的变量

在其他的编程语言中,有可变变量、常量、不可变变量,比如说在C#中,不加修饰符定义的变量是可变变量,使用readonly修饰的变量是不可变变量,使用const修饰的是常量,在Rust中也有对应的可变变量、不可变变量、常量

C#中常量和变量(常见的面向对象语言中的常量和变量)


// readonly字段可以在构造函数和字段声明初始化,可用于运行时常量

// 后面使用timeStamp时不可再改变它的值,但是在首次初始化时可以提供一个变量
public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;

// const只能在声明是初始化值,是编译时常量,因为编译时程序无法确定变量的值,因此为常量初始化时只能使用常量,或者常量表达式,必须是在编译期就能确定的值
const int C = 707;

// 可以使用常量表达式赋初值
const int D = C + 100;

int x = 100;

x = 101;

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


// 如果不加修饰,定义的是不可变变量
let x = 5;

// 使用mut修饰,定义的是可变变量
let mut x = 5;
// 使用mut修饰的是可变变量,可以重新赋值
x = 6;

// 使用const声明常量,必须指定数据类型,Rust 对常量的命名约定是在单词之间使用全大写加下划线
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;

隐藏

在上面的代码中,有一个寻常面向对象语言不允许的操作:同一作用域使用隐藏

在C#中,在同一作用域中,不能声明相同名称的变量(在不同作用域中可以,也可以在内层作用域声明相同名称的变量隐藏外层作用域的变量),而Rust允许在相同层级隐藏,正如上面的代码中声明了两次x。当然,在不同层级也可以声明相同名称变量来隐藏之前的声明,效果与常见的面向对象语言效果相同

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        // x 的值为12
        println!("The value of x in the inner scope is: {x}");
    }

    // 脱离之前的作用域后隐藏的x重新可以获取了,此时x为6
    println!("The value of x is: {x}");
}
Last Updated:
Contributors: 吴俊城
Next
数据类型