» Rust快速入门 » 1. 基础篇 » 1.3 基础类型

基础类型

标量类型

  • 有符号整数:i8, i16, i32, i64, i128isize
  • 无符号整数:u8, u16, u32, u64, u128usize
  • 浮点数: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...
> 此处输出代码运行结果
上页
下页