原生类型 primitive types
本章讲述 rust 内建的数据类型。
类型名 | 类型 | 说明 |
---|---|---|
bool | bool |
true or false |
char | char |
'c' 32-bits unicode |
integer | i/u + 8/16/32/64 |
|
size | isize or usize |
依赖底层机器指针大小 |
float | f32 or f64 |
IEEE-754 |
array | [T; N] |
[Type; Number] |
slice | &[T] |
&[Type] |
str | ||
tuple | (Tn,) |
|
function | fn(i32) -> i32 |
函数指针 |
let x = true;
let x: bool = false;
代表一个 unicode
字符,所以其长度为 4 Bytes, 32-bits
。
let x = 'x';
let y = '';
有符号
和 无符号
定长
和 变长
浮点
和 整型
。let x = 42; // integer default is i32
let y = 1.0; // float default is f64
let x: i32 = 1;
let y: u8 = 2;
i
代表有符号,u
代表无符号。8 / 16 / 32 / 64
。依赖 底层机器指针 / 硬件架构
大小的类型。有符号位区分。
let x: isize = 1;
let y: usize = 2;
支持 IEEE-754
的 单精度f32
和 双精度f64
浮点数。
let x: f32 = 1.0;
let y: f64 = 2.0;
c中所说的 数组array
,其他现代语言所描述的 列表list
。一个定长的,相同元素类型的列表。
let a = [1, 2, 3]; // a: [i32; 3]
let mut b = [1, 2, 3, 4]; // b: [i32, 4]
数组的类型:[T: N]
。T = Type, N = Number。
将数组中每个元素都初始化相同值的简写方法。
let a : [i32, 20] = [0; 20];
获取数组长度的方法:.len()
。
let a = [1,2,3];
println!("array len = {}", a.len());
mint:类似于c中使用了
sizeof(array) / sizeof(array_type)
。
let a = [1,2,3];
println!("array 1st element = {}", a[0]);
rust的数组下标也是从 0
开始。
rust中,数组访问在
运行时
会进行边界检测
方式。
一个 切片slice
是一个数组的 引用
。因为是指针引用而不用进行数据copy。在底层,切片代表:
切片的类型:&[T]
。&
代表一个引用,[]
包含切片的长度。
let a : [u32; 5] = [1, 2, 3, 4, 5];
let complete : &[u32] = &a[..];
let middle : &[u32] = &a[1..4]; // 1, 2, 3
切片的长度 ∈ [下标, 上标)
mint: 类似于c中
struct {type *pStart; u32 len;};
字符串类型是 不定长
类型。在引用后将变得很好用 &str
。
元组是固定大小的有序列表。
let x : (i32, &str) = (1, "hello");
元组是异质的。元组的每个元素可以不是同一个类型,如,
(i32, &str)
。 2
(2个元素)。mint:但tuple没有
.len()
的方法。。。
如果两个元组包含 相同的类型
和 相同的数量
,两个元组可以赋值。
let mut x = (1, 2);
let y = (2, 3);
x = y;
还记得 变量绑定 中的 模式 吗?
let (x, y, z) = (1, 2, 3);
let会 解构destructures
元组,并分成多个 绑定bindings
。
括号中只有单个元素时,添加逗号表明其实元组(和python等一样)。
不同于数组索引使用 []
,元组索引使用 .
。
let xyz = (1,2,3);
let x = xyz.0;
let y = xyz.1;
let z = xyz.2;
fn foo(x : i32) -> i32 = { x }
let x : fn(i32) -> i32 = foo;
x是个指针,指向一个函数。