基础类型
标量类型
- 有符号整数:
i8
,i16
,i32
,i64
,i128
和isize
- 无符号整数:
u8
,u16
,u32
,u64
,u128
和usize
- 浮点数:
f32
,f64
char
用于表示 Unicode 标量值- 布尔类型:
bool
- Unit 单元类型:
()
(一个空元组)
复合类型
- 数组:
[1, 2, 3, 4, 5]
- 元组:
(true, 58)
变量始终可以使用类型注解。
let is_rich: bool = true;
数值可以附加后缀进行注解。如果没有类型注解,编译器将推断其默认类型。
let a_float: f64 = 1.0;
let an_int = 5i32; // `i32` 是后缀
let another_float = 58.0; // 默认为 `f64`
// 使用下划线可以提高可读性
println!("One million is written as {}", 1_000_000u32);
元组
元组是不同类型值的集合。元组使用括号 ()
构造。
函数可以使用元组返回多个值。
fn flip(pair: (f64, bool)) -> (bool, f64) {
let (f, b) = pair;
(b, f) // 最后的表达式(无分号)直接作为返回值
}
let big_tuple = (58u32, 2u16, -2i16, 'a');
println!("First element: {}, Second element: {}", big_tuple.0, big_tuple.1);
// First element: 58, Second element: 2
可以通过索引从元组中提取值,例如 big_tuple.0
。
数组和切片
数组是相同类型对象的集合,存储在连续的内存中。数组使用括号 []
创建。
数组的长度在编译时就已经知道,因此其类型签名为 [T; length]
。
// 固定长度数组
let a: [i32; 5] = [1, 2, 3, 4, 5];
let b: [i32; 10] = [5; 10]; // 所有元素都初始化为 `5`
// [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
切片类似于数组,但其长度在编译时不知道。
切片可用于 borrow
借用 数组的一部分,所以其类型签名为 &[T]
。
// `start_index` 1 包含在内
// `end_index` 3 不包含在内
let c: &[i32] = &a[1..3];
println!("{:?}", c); // [2, 3]
代码挑战
尝试修改编辑器中提供的代码以逆转切片。
Loading...
> 此处输出代码运行结果