Rust 数据类型

在 Rust 中,每一个值都属于某一个 数据类型(data type),这告诉 Rust 它被指定为何种数据,以便明确数据处理方式。我们将看到两类数据类型子集:标量(scalar)和复合(compound)。

Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型。根据值及其使用方式,编译器通常可以推断出我们想要用的类型。但是很多时候存在多种类型都有可能的情况。

// fail 会发生编译错误
let guess = "42".parse().expect("Not a number!")
// success
let guess: u32 = "42".parse().expect("Not a number!")

标量类型

标量(scalar)类型代表一个单独的值。Rust 有四种基本的标量类型。

类型名称
整型
浮点型
布尔型
字符类型

整型

整型 是一个没有小数部分的数字,并且通过u来决定整型是否是带符号。
有符号无符号 代表数字能否为负值

长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
arch size usize
整型溢出

一个u8类型的整型最多放255,如果放入256,就会导致“整型溢出”(“integer overflow” )

浮点型

Rust 也有两个原生的 浮点数(floating-point numbers)类型,它们是带小数点的数字。Rust 的浮点数类型是 f32 和 f64,分别占 32 位和 64 位。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。

数值运算

+ | -  | * | %

布尔型

true / false

字符类型

Rust 的 char 类型是语言中最原生的字母类型,
char 由单引号指定,不同于字符串使用双引号

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '';
}

复合类型

复合类型Compound types)可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。

元组

元组是一个将多个其他类型的值组合进一个复合类型的主要方式。
我们使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的。

fn main() {
    let tup: (i32, f64, u8) = (500, 6.4, 1);
}

tup 变量绑定到整个元组上,因为元组是一个单独的复合元素。为了从元组中获取单个值,可以使用模式匹配(pattern matching)来解构(destructure)元组值

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

数组

另一个包含多个值的方式是 数组(array)。与元组不同,数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,因为 Rust 中的数组是固定长度的:一旦声明,它们的长度不能增长或缩小。

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

当你想要在栈(stack)而不是在堆(heap)上为数据分配空间,或者是想要确保总是有固定数量的元素时,数组非常有用。但是数组并不如 vector 类型灵活。vector 类型是标准库提供的一个 允许 增长和缩小长度的类似数组的集合类型。当不确定是应该使用数组还是 vector 的时候,你可能应该使用 vector。

你可能感兴趣的:(Rust 数据类型)