Rust 编译器可以根据变量的值和上下文中的使用方式来自动推导出变量的类型,但在它无法推导出变量类型时,需要手动去给予一个类型标注。
数值类型
基本类型
有符号整数:i8
, i16
, i32
, i64
, isize
无符号整数:u8
, u16
, u32
, u64
, usize
isize、usize 的位数则视架构而定,在 32 位架构上为 32 位,在 64 位架构上为 64 位,适合用于表示内存地址、数组索引等需要根据系统架构来决定大小的场景。
浮点数:f32
, f64
有符号/无符号整数,浮点数的具体内容可以查看 数据的表示和运算。
浮点数类型是基于二进制实现的,因此某些数字无法精确表示(例如 0.1)。
NaN
NaN
(Not a Number)是浮点数的一种特殊值,表示一个无效或无法定义的数值结果。它常见于浮点数运算中,如零除以零、无效的平方根等情况。NaN
不等于任何值,包括自己。可以使用 is_nan()
等方法,可以用来判断一个数值是否是 NaN
。
序列
序列(Range)用来生成连续的数值。序列只允许用于数字或字符类型。
单元类型
单元类型即 ()
,其唯一的值也是 ()
,通常表示“没有值”或“什么都没有”。
很多时候,Rust 中的函数如果没有返回值,它的返回类型就是单元类型 ()
。即使函数没有显式返回 ()
,Rust 也会隐式地认为它返回了 ()
。
使用场景:
- 函数返回值:函数如果不需要返回任何有意义的结果,可以显式返回
()
。例如,很多 Rust 中的事件处理函数、回调函数、或者某些状态修改函数通常返回 ()
,表示操作已经完成但没有结果。
- 占位符:有时,
()
用作占位符,表示某个地方没有具体的值或没有需要关注的数据。
语句和表达式
语句是执行某个操作的代码块,它通常没有返回值。它告诉程序去做某件事,但不产生一个可以进一步操作的值。
表达式是产生一个值的代码块。它可以被计算出一个值,并且这个值可以被赋值、返回或者传递给其他表达式。
函数
函数是一段封装好的代码块,用来执行特定的任务。函数接收输入(参数)、执行一系列操作,并可能返回一个值。
Rust 不关心我们在哪里定义了函数,只要有定义即可。
函数的参数可以有多个,并且每个参数都要指定类型。参数是函数外部传入的值,它们的作用域仅限于函数体内。