类型
有符号整数(signed integers):i8、i16、i32、i64、i128 和 isize(指针宽度)
无符号整数(unsigned integers): u8、u16、u32、u64、u128 和 usize(指针宽度)
浮点数(floating point): f32、f64
char(字符):单个 Unicode 字符,如 'a','α' 和 '∞'(每个都是 4 字节)
bool(布尔型):只能是 true 或 false
单元类型(unit type):()。其唯一可能的值就是 () 这个空元组
- 类型不可改变
- 类型可能根据上下文内容推导出来
数字类型
可以在数字中添加下划线, 例如 1_000
元组
使用 ()
来表示元组, 使用 tuple.0
来访问第一个下标位置
- 元组内部的元素的类型可以不一致, 元组可以嵌套
可以使用解构语法
// 元组可以被解构(deconstruct),从而将值绑定给变量let tuple = (1, "hello", 4.5, true);
数组
存放的是相同的数据类型, 并且在内存中是连续的
数组的类型标记为 [T; length](译注:T 为元素类型,length 表示数组大小)。
// 定长数组(类型标记是多余的)let xs: [i32; 5] = [1, 2, 3, 4, 5];// 所有元素可以初始化成相同的值let ys: [i32; 500] = [0; 500];
使用
arr[1..2]
实现数组的切片
自定义类型
struct: 定义一个结构体(structure)
enum: 定义一个枚举类型(enumeration)
struct
// 元组结构体
struct Pair(i32, f32);
给自己预先设定的元组一个名字, 同时, 一个有名字的元组的结构需要使用 let Pair(integer, decimal) = pair;
实现
- 结构体支持组合
let _rectangle = Rectangle {// 结构体的实例化也是一个表达式top_left: Point { x: left_edge, y: top_edge },bottom_right: bottom_right,};
实例化一个结构体
enum
枚举类型的自定义对象可以通过 ::
来获取(可以携带参数等)
别名
别名使用 type Operations = VeryVerboseEnumOfThingsToDoWithNumbers;
创建
// 创建一个 `enum`(枚举)来对 web 事件分类。注意变量名和类型共同指定了 `enum`
// 取值的种类:`PageLoad` 不等于 `PageUnload`,`KeyPress(char)` 不等于
// `Paste(String)`。各个取值不同,互相独立。
enum WebEvent {// 一个 `enum` 可以是单元结构体(称为 `unit-like` 或 `unit`),PageLoad,PageUnload,// 或者一个元组结构体,KeyPress(char),Paste(String),// 或者一个普通的结构体。Click { x: i64, y: i64 }
}
use
使用 use
方便开发的时候少写一些内容
// 显式地 `use` 各个名称使他们直接可用,而不需要指定它们来自 `Status`。use Status::{Poor, Rich};// 自动地 `use` `Work` 内部的各个名称。use Work::*;
常量
// 全局变量是在所有其他作用域之外声明的。
static LANGUAGE: &'static str = "Rust";
const THRESHOLD: i32 = 10;