接触一门新语言,我们应该首先了解一下它的相关基础性的概念,所以今天我们来聊一下Rust的数据类型,有基础的打字员可以大致的与已知体系过对比着一遍。
Rust里面每一个值都有一个数据类型,这样Rust才会知道这个值是哪种处理方式;总的来说氛围两种:标量类型和复合类型,另外Rust要求在编译的时候就必须知道所有变量的类型。
标量类型
整型、浮点型、布尔类型以及字符类型是Rust的四种标量类型,也是最基本的类型,如果有其他语言基础的可以略过。
整型
整型也就是没有小数的数字类型(整数类型),整型的默认是i32。i表示一个有符号的整数类型,32表示它占用的长度是32-bit。有符号和无符号也就是代表数字能否为负值,每一个变体都是可以有符号或者是无符号的。在下面列出所有的整型类型:
有符号 | 无符号 | 占用长度 |
---|---|---|
i8 | u8 | 8个字节 |
i16 | u16 | 16个字节 |
i32 | u32 | 32个字节 |
i64 | u64 | 64个字节 |
另外Rust允许使用_
作为分割符以方便识别数字字面值。如2_000
。同时还可以使用类型后缀来声明数字值,除了byte类型意外的所有数字值都可以使用,如50u8
。
接下来我们整理一下声明整型的几种方式:
fn main() {
let x = 2000; // i32
let x = 2000i32;
let x = 2_000;
let x: i32 = 2000;
}
浮点
浮点型简单来说也就是带小数点数字(浮点数)类型。Rust中的浮点数类型是f32
和f64
,从字面中可以看出它们分别占用32位和64位。
所以我们直接给出案例:
fn main() {
let x = 5.0;
let x: f32 = 5.0;
let x = 5.0f32;
}
布尔
我们一般会在条件表达式中用到布尔值,它们的情况就只有是或者不是,Rust中的布尔类型有两个可能值:true与false。用bool
表示。直接上代码:
fn main() {
let x = true;
let x: bool = true;
}
字符
字符类型char
是语言中原生的字母类型,由单引号指定。说到字符肯定不得不提字符串,Rust中只有一种字符串类型str
,字符串slice,可以理解为字节的集合再加一些方法实现的字符串,这个概念我们后面再详细描述。我们先看一下如何使用字符:
fn main() {
let x = 'z';
let x = 'Y';
let x = '?';
}
复合类型
Rust中有两种原生的复合类型:元祖和数组,可以将多个值组合成一个类型。
数组
数组中包含了多个值,每个元素的类型必须相同,长度固定;一旦被声明,长度是无法改变的。这一点和其他语言有所不同。数组的数据是存放在栈上的,在Rust标准库中与数组类似的集合类型vector则是在堆上,这个大家可以先去做做功课。
以下代码展示使用数组存放了一个星期名字的两种方式:
fn main() {
let weeks = [
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"
];
let weeks: [&str; 7] = [
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"
];
}
那我们如何访问数组的元素呢?上面说过数组是一整块都分配在栈上的内存。那我们可以通过索引来访问数组元素,我们使用索引来访问上面的星期三和星期四元素:
fn main() {
let weeks = [
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"
];
let wed = weeks[2];
let thurs = weeks[3];
// 小白提示:计算机索引是从0开始的哦
}
当然,如果我们访问数组之外索引值时会导致运行错误index out of bounds
元组
和数组不一样的是,元祖可以允许不同的类型进行组合,每一个元素都有一个类型。如下:
fn main() {
let rectangle:(i32,f64) = (200, 6.4);
}
比较复杂的是,我们需要使用模式匹配来解构元组值或者通过.
后面跟上索引值,这样才可以从元组中获取单个值。
fn main() {
let rectangle:(i32,f64) = (200, 6.4);
let height = x.0;
let width = x.1;
let (height, width) = rectangle;
}
小黑板
我们大概知道了Rust中的基础数据类型以及如何使用他们。在这里敲一下小黑板,补充一下数字类型的数值运算:+、-、*、/
。
fn main() {
// 加
let plus = 1 + 1;
// 减
let minus = 2 - 1;
// 乘
let multiply = 1 * 2;
// 除
let divide = 2 / 1;
// 取余
let remainder = 3 % 2;
}
下课
很多打字员看到这可能觉得比较基础,而且并没有感受到任何挫折感,这几篇文章完全是按照打字员学习Rust的成长路径来的,在分享的同时也在帮助打字员梳理基础的理论知识。觉得没有感受到挫折感没关系,期待后面的狂风暴雨趴。(逃
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。