Rust 变量与数据类型

Rust variables and data types

变量和可变性

变量

在Rust中,变量默认是不可变的,可以通过在变量前增加mut关键字使其可变。

0
1
2
3
// 不可变变量
let x = 5;
// 可变变量
let mut y = 5;

常量

常量是绑定到一个常量名且不允许更改的值。

0
const PI: f32 = 3.1415927;

常量与不可变变量的区别:

  • 常量使用const关键字声明;
  • 常量声明必须使用类型标注;
  • 常量可以在任意作用域内声明,包括全局作用域,且在声明的作用域内始终有效;
  • 常量只能设置常量表达式,不能设置函数或运行计算结果。

遮蔽

声明和已有变量具有相同名称的新变量叫遮蔽,使用let关键字来遮蔽变量。

0
1
let x = 5;
let x = "str";

遮蔽与mut关键字的区别:

  • 遮蔽可以修改变量的可变性;
  • 遮蔽可以修改变量的类型。

数据类型

Rust 的每个值都有确切的数据类型,同时Rust又是一种静态类型语言,即在编译期就能推断出所有变量的类型。

标量类型

标量类型表示单个值,Rust有4个基本的标量类型:整型浮点型布尔型字符

整型

整型是指没有小数的数字类型,Rust的整型分为有符号整型和无符号整型,分别以iu表示。

长度 有符号类型 无符号类型
8 bit i8 u8
16 bit i16 u16
32 bit i32 u32
64 bit i64 u64
128 bit i128 u128
arch isize usize

数字范围

  • 有符号整型:-(2n - 1) ~ 2n - 1 - 1
  • 无符号整型:0 ~ 2n - 1

isizeusize类型取决于程序运行的计算机体系结构(32位或64位)。

整型字面量:

  • 当数字可能属于多种类型时,使用类型后缀来指定类型;
  • 可以使用 _ 作为可视分隔符以方便阅读。
数字字面量 示例
二进制 0b1111_0000
八进制 0o77
十进制 10_000
十六进制 0xff
字节(仅限于u8 b'A'

浮点类型

Rust 的浮点型有两种,f32和默认的f64,它们的大小分别为32位和64位,所有的浮点型都是有符号的。

0
1
let x = 2.0; // f64
let y: f32 = 3.0; // f32

数字运算

Rust的所有数字类型都支持基本数学运算。

0
1
2
3
4
5
let sum = 5 + 10;
let difference = 94.5 - 3.1;
let product = 3 * 40;
let quotient = 56.7 / 32.2; 
let floored = 2 / 3; 
let remainder = 43 % 5;

布尔类型

布尔类型有两个值:truefalse,使用bool进行声明,布尔值大小为1个字节。

0
1
let t = true;
let f: bool = false;

字符类型

字符类型采用char声明,使用单引号括起来,字符类型大小为4个字节,表示的是一个Unicode标量值。

0
1
2
let a = 'a';
let b: char = 'b';
let c = '中';

复合类型

复合类型可以将多个值组合成一个类型,元组合数组是rust中两个基本的复合类型。

元组类型

元组是将多种类型组合成为一种复合类型的方式,其长度在声明之后不可变。

0
let tup: (i32, f64, u8) = (500, 6.4, 1);

元组可以使用模式匹配的方式来解构,从而获取某一个值。

0
1
2
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);

也可以通过句点后跟索引(从0开始)的方式来访问元素。

0
1
2
3
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;

没有任何值的元组 () 是一种特殊的类型,只有一个值,写为 ()。该类型被称为单元类型,该值被称为单元值。如果表达式不返回任何其他值,就隐式地返回单元值。

数组类型

数组可以将多个值组合在一起,但要求元素的类型是相同的,数组具有相同的类型。

0
let a = [1, 2, 3, 4, 5];

数组可以使用方括号进行声明,指定元素类型和元素数。

0
let a: [i32; 5] = [1, 2, 3, 4, 5];

也可以在声明时指定值来初始化。

0
let a = [3; 5]; // 等同于 let a = [3, 3, 3, 3, 3];

数组通过中括号加索引(从0开始)的方式访问元素。

0
1
2
let a = [1, 2, 3, 4, 5]; 
let first = a[0]; 
let second = a[1];

参考链接:Rust 通用编程概念

Licensed under CC BY-NC-SA 4.0
赞助
Sponsor WeChat Pay
Sponsor Ali Pay
Powered by HugoStack