💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ### **数据类型** 我们将看到两类数据类型子集:标量(scalar)和复合(compound) ### **标量** Rust中的整形 | 长度 | 有符号 | 无符号 | | --- | --- | --- | | 8-bit | `i8` | `u8` | | 16-bit | `i16` | `u16` | | 32-bit | `i32` | `u32` | | 64-bit | `i64` | `u64` | | arch | `isize` | `usize` | **有符号**和**无符号**代表数字能否为负值,每一个有符号的变体可以储存包含从 -(2n - 1) 到 2n - 1- 1 在内的数字,这里*n*是变体使用的位数。 `i8`可以储存从 -(27) 到 27\- 1 在内的数字,也就是从 -128 到 127。无符号的变体可以储存从 0 到 2n\- 1 的数字,所以`u8`可以储存从 0 到 28\- 1 的数字,也就是从 0 到 255。 ``` ``` 浮点 布尔型 字符型 ### **复合类型** **复合类型**(*Compound types*)可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。 #### 元组类型 文件名: src/main.rs ``` fn main() { let tup: (i32, f64, u8) = (500, 6.4, 1); } ``` `tup`变量绑定到元组上,元组是一个单独的复合元素,我们可以用模式匹配来结构元组值: ``` fn main() { let tup = (500, 6.4, 1); let (x, y, z) = tup; println!("The value of y is: {}", y); } ``` 程序创建了一个元组并绑定到元组`tup`上,。接着使用了`let`和一个模式将`tup`分成了三个不同的变量,`x`、`y`和`z`。这叫做**解构**(*destructuring*),因为它将一个元组拆成了三个部分。最后,程序打印出了`y`的值,也就是`6.4`。 除了使用模式匹配解构外,也可以使用点号(`.`)后跟值的索引来直接访问它们。例如: 文件名: src/main.rs ``` fn main() { let x: (i32, f64, u8) = (500, 6.4, 1); let five_hundred = x.0; let six_point_four = x.1; let one = x.2; } ``` #### 数组(分配在栈上) 与元组不同,数组中的每个元素的类型`必须相同`。Rust 中的数组与一些其他语言中的数组不同,因为 Rust 中的数组是`固定长度`的:一旦声明,它们的长度不能增长或缩小。 Rust 中,数组中的值位于中括号内的逗号分隔的列表中: 文件名: src/main.rs ``` fn main() { let a = [1, 2, 3, 4, 5]; } ``` ##### 使用数组索引访问数组元素 ``` let first = a.0; let second = a[1]; ``` ##### 无效的数组元素访问 如果我们访问数组结尾之后的元素会发生什么呢?比如你将上面的例子改成下面这样,这可以编译不过在运行时会因错误而退出: ``` fn main() { let a = [1, 2, 3, 4, 5]; let index = 10; let element = a[index]; println!("The value of element is: {}", element); } ```