Rust入门 之一
Rust入门 之一
- 数据类型
- 基本数据类型
- 标量类型
- 整数类型
- 浮点类型
- 布尔类型
- 字符类型
- 复合类型
- 元组类型
- 数组类型
- 类型转换
- 常量后缀类型表达
- 类型推导
- 类型别名
数据类型
Rust 提供了多种机制来更改,或定义基本类型和用户自定义类型。
- 基本数据类型
- 类型转换
- 指定字面量所需的类型
- 类型推断
- 类型别名
基本数据类型
rust 中的每个值都具有特定的数据类型,这告诉 Rust 所指定的数据类型,以便它知道如何处理这些数据。我们将介绍两种数据类型子集
- 标量
- 复合类型
rust 是一种静态类型语言,这意味着,它必须在编译时知道所有变量的类型。编译器通常可以根据值,及其使用方式推断出我们想要使用的类型。在存在多种可能类型的情况下,使用parse将字符串转换为数值类型时,我们必须添加类型注解。
let guess: u32 = "152".parse().expect("Not a number!");
标量类型
标量类型表示单个值。Rust 有四种主要的标量类型:整数、浮点数、布尔值和字符。你可能在其他编程语言中也见过这些类型。让我们深入了解它们在 Rust 中的工作原理。
整数类型
整数是不包含小数部分的数字。下表显示了Rust 中的内置整数类型。我们可以使用其中任何一种来声明整数值的类型。
| 数据类型长度 | 有符号数 | 无符号数 |
|---|---|---|
| 8位 | i8 | u8 |
| 16位 | i16 | u16 |
| 32位 | i32 | u32 |
| 64位 | i64 | u64 |
| 128位 | i128 | u128 |
| 依赖架构 | isize | usize |
浮点类型
Rust 还提供了两种用于表示浮点数的基本类型
- f32,32位浮点数
- f64,64位浮点数
默认类型是 f64。所有浮点类型都是有符号的。
let x = 2.0; // f64, 约定浮点类型let y: f32 = 3.0; // f32
布尔类型
与大多数其他编程语言一样,Rust 中的布尔类型只有两个可能的值:true 和 false。布尔类型的大小是一个字节。Rust 中的布尔类型使用 bool 来指定。
let t = true;let f: bool = false; // with explicit type annotation
字符类型
Rust 的 char 类型是该语言最基本的字母类型。
let c = 'z';let z: char = 'ℤ'; // with explicit type annotation
复合类型
复合类型可以将多个值组合成一个类型。Rust 有两种基本复合类型
- 元组
- 数组
元组类型
元组是一种将多个不同类型的值组合成一个复合类型的通用方法。元组的长度是固定的。一旦声明,其大小就不能增加或减少。
我们通过在括号内编写以逗号分隔的值列表来创建元组。元组中的每个位置都有一个类型,元组中不同值的类型不必相同。
let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup;let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
变量 tup 绑定到整个元组,因为元组被视为一个单一的复合元素。要从元组中获取各个值,我们可以使用模式匹配来解构元组值。
数组类型
另一种存储多个值的方法是使用数组。与元组不同,数组中的每个元素必须具有相同的类型。
我们将数组中的值写成用逗号分隔,并放在方括号内的列表:
let a = [1, 2, 3, 4, 5];
let weekdays = ["Mon.","Tu.", "Wed.", "Thur.", "Fri.", "Sat.", "Sun."];
类型转换
Rust 不支持原始类型之间的隐式类型转换。但是,可以使用as关键字进行显式类型转换。
整型之间的转换规则,通常遵循C语言的约定,除非 C 语言中存在未定义行为的情况。Rust 中所有整型之间的强制转换行为都已明确定义。
let decimal = 65.4321_f32;// Explicit conversionlet integer = decimal as u8;let character = integer as char;
常量后缀类型表达
数值常量类型可以通过添加类型后缀进行类型注解。例如,要指定数值常量89的类型为i32,可以写成 89i32。
未添加后缀的数值常量类型取决于它们的使用方式。如果没有类型约束,编译器将使用i32表示整数,使用 f64 表示浮点数。
let x = 25u8;
let y = 512u32;
let z = 3f32;
类型推导
Rust类型推导非常智能。它不仅在初始化时,检查值表达式的类型,还会检查变量之后的使用方式,来推导其类型。
let elem = 5u32;
let mut v = Vec::new();
v.push(elem);
代码例子
fn main() {let elem = 1024u32;let mut v = Vec::new();v.push(elem);v.push(125);println!("{:?}", v);
}
屏幕输出
[1024, 125]
类型别名
可以使用 type 语句为现有类型指定新名称。类型名称必须使用UpperCamelCase名,否则编译器会发出警告。此规则的例外情况是,基本类型usize、f32 等。
UpperCamelCase是一种命名规则,其中复合词或短语中每个单词的首字母都大写,且不加空格或其他分隔符。
// NanoSecon, Inch, and U64 are new names for u64.
type NanoSecond = u64;
type Inch = u64;
type U64 = u64;
