Rust学习笔记 一 : 变量
之前草率的学习了Rust,大概基本概念和语法都弄懂了,但是一直没得地方实战,怕过几天就忘了,特开此篇复习
这个系列文章的结构会和普通教程结构有所不同,更加偏向我个人的排版顺序
变量的声明
使用 let
关键字可以声明变量
这里有一个概念的问题,Rust中声明变量应该视为将值绑定到这个变量上,这和Rust的所有权机制有关
Rust变量的声明大致如下:
let a = 32;
这就是Rust最普通的变量声明。
变量基本数据类型
通常来讲,Rust会自动推断出变量的类型(类型推导)。当然,你也可以显式指定他的类型,比如这样:
// i32 为32位带符号整数
let a: i32 = 32;
Rust大致有以下几种数据类型:
u8 / i8
u16 / i16
u32 / i32
u64 / i64
u128 / i128
usize / isize
(根据操作系统决定)f32 / f64
(32位浮点与64位浮点)bool
char
(四字节,Unicode编码)
字面量
Rust支持一些特殊格式用于声明字面量:
98_222
代表98222这个数字(10进制)0xff
16进制0o77
8进制0b1111_0000
2进制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)这玩意还是待会再说吧..