03_变量与值可变性

rust定义变量

概要

变量 & 可变性

Variables & Mutability

  • 声明变量 let some_number = 1; 默认:变量是不可变的
  • 声明可变变量 let mut another_number = 2;

常量
Constants

  • 声明常量
    const SPECIAL_NUMBER: i32 = 3;
    const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
  • 使用 const 声明
  • 不可以使用 mut
  • 必须标注类型
  • 可在任意作用域声明
  • 仅可以使用常量表达式赋值

变量遮蔽
Shadowing

let my_number = 1;
let my_number = 2;

  • 可以用与之前变量相同的名字声明一个新变量:第一个变量被第二个变量 “遮蔽” 了(shadowed)
  • 就是创建了一个新的变量,只不过名字相同


详细

  • let关键字
    用于声明变量:let (mut) 变量名

  • 变量值是否改变
    默认变量值不可变(Immutable),在声明变量时加上mut才为可变变量。

let x = 5;
x = 6;
let mut y = 6;
y = 8;
let mut y: u32 = 9;

第二行编译报错,上边变量声明时未标注类型的,默认是i32类型。

rust定义常量

常量(constant),常量在绑定值以后一直不再可变。使用const声明。
程序运行期间,常量在声明作用域内一直有效。

常量与不可变变量的区别

常量不可用mut,且永远不可变
常量声明使用const,且类型必须被标注
常量可在任何作用域内声明,包括全局作用域
常量声明时只可赋值(绑定)为常量表达式,等号右侧不能是函数调用,也不能是运行时才能计算出的值

常量命名规范:Rust里常量使用全大写字母,每个单词之间用下划线分开。
如:

const MAX_NUM: u32 = 100_000;

Shadowing(隐藏)

可用相同名字声明新的变量,新的变量会shadow(隐藏)之前声明的同名变量。
如:()

let x = 5;
let x = x + 1;
let y = x;
let x = "9";

前后x是两个变量,第二行的x隐藏了第一行的x变量,第三行的x是第二行的x=6。

shadow和mut的区别

若不用let,重新给非mut变量赋值报错
使用let声明同名变量,也是不可变的
使用let声明同名新变量,类型可与上一个不同

let s = "test"; // s是str类型
let s = s.len(); // s为usize类型了

let mut t = "test";
t = t.len(); // 编译报错
posted @ 2023-10-11 15:17  00lab  阅读(44)  评论(0)    收藏  举报