Rust学习笔记 一 : 变量

Rust学习笔记 一 : 变量

Rust学习笔记 一 : 变量 之前草率的学习了Rust,大概基本概念和语法都弄懂了,但是一直没得地方实战,怕过几天就忘了,特开此篇复习 这个系列文章的结构会和普通教程结构有所不同,更加偏向我个人的排版顺序 变量的声明 使用 let 关键字可以声明变量 这里有一个概念的问题,Rust中声明变量应该视

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)这玩意还是待会再说吧..

LICENSED UNDER CC BY-NC-SA 4.0
Comment