Rust学习笔记 一 : 变量
Rust学习笔记 一 : 变量
之前草率的学习了Rust,大概基本概念和语法都弄懂了,但是一直没得地方实战,怕过几天就忘了,特开此篇复习
这个系列文章的结构会和普通教程结构有所不同,更加偏向我个人的排版顺序
变量的声明
使用 let 关键字可以声明变量
这里有一个概念的问题,Rust中声明变量应该视为将值绑定到这个变量上,这和Rust的所有权机制有关
Rust变量的声明大致如下:
let a = 32;这就是Rust最普通的变量声明。
变量基本数据类型
通常来讲,Rust会自动推断出变量的类型(类型推导)。当然,你也可以显式指定他的类型,比如这样:
// i32 为32位带符号整数
let a: i32 = 32;Rust大致有以下几种数据类型:
u8 / i8u16 / i16u32 / i32u64 / i64u128 / i128usize / isize(根据操作系统决定)f32 / f64(32位浮点与64位浮点)boolchar(四字节,Unicode编码)
字面量
Rust支持一些特殊格式用于声明字面量:
98_222代表98222这个数字(10进制)0xff16进制0o778进制0b1111_00002进制b'A'默认是u8类型,可以转成char
可变性
Rust的变量有个特性,就是 可变 与 不可变 。可变的变量需要我们显式的用 mut 关键字声明。
顾名思义,可变变量就是值可以被修改,也就是说如果我们不使用 mut 关键字声明变量,这个变量就可以类比成一个常量(但又有些不同,之后会提到)
代码实现:
let mut a = 32;
// 可以被修改,如果没有mut关键字就会报错
a = 64;遮蔽
Rust中有遮蔽的概念,一个变量可以被遮蔽:
// 声明任意变量,不需要mut关键字
let a = 32;
// 此时a被遮蔽成另一个变量
// 遮蔽等于将这个a重新绑定到了另外一个值上,他和mut有着本质上的区别
// mut是修改原来的值
// 还有一个区别就是 遮蔽可以改变变量的类型,而mut不可以
let a = 64;遮蔽可以改变这个变量的类型,因为它相当于把变量绑定到了另外一个值上。这个特性十分有用,比如我们处理一些参数的时候可以用到:
// 这里假设data是某个网络请求返回的数据
// 含有三个属性,code, data和msg
let data = XXX;
// 我们想直接获取他的data属性
// 直接对他进行遮蔽
let data = data.data;常量
Rust使用关键字 const 声明常量,语法如下
const A: i32 = 1;常量有几个特点:
无法声明为mut (很好理解)
无法被遮蔽
可以被编译器优化
声明时必须指定类型,不能使用类型推导
静态变量
Rust中使用 static 关键字声明静态变量,语法如下
static A: i32 = 1;静态变量的主要特点如下:
所有权不能被转移
生命周期为
'static
静态变量可以被声明为可变的,但是想要修改它我们需要使用unsafe代码块
static mut A: i32 = 1;
unsafe {
A = 5;
}一个玩意牵扯到三个概念(所有权,生命周期,unsafe)这玩意还是待会再说吧..