变量
- 默认为不可变变量,一旦绑定赋值将不再允许改变。
|
|
- 定义为可变变量后变量可被随意改变。
|
|
常量与变量的区别
- 常量的一旦定义不可再变。
- 用
const
声明,不能用mut
修饰。 - 常量可以在任何作用域中声明。
- 在编译期确定值,而变量在运行期确定值。
- 常量使用全大写字母作为名称,下划线
_
隔开单词。
隐藏(Shadowing)
- 可通过隐藏变量对一个不可变变量“重新赋值”,实质上是重新定义了一个新的变量。
|
|
数据类型
标量
整型:
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
- 每一个有符号的变体可以储存包含从
-(2n - 1)
到2n - 1 - 1
在内的数字,这里n
是变体使用的位数。所以i8
可以储存从-(27)
到27 - 1
在内的数字,也就是从-128
到127
。 - 无符号的变体可以储存从
0
到2n - 1
的数字,所以u8
可以储存从0
到28 - 1
的数字,也就是从0
到255
。 - isize 和 usize 类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。
- 整形字面值:
数字字面值 例子 Decimal (十进制) 98_222 Hex (十六进制) 0xff Octal (八进制) 0o77 Binary (二进制) 0b1111_0000 Byte (单字节字符)(仅限于u8) b'A' - 除
byte
以外的所有数字字面值允许使用类型后缀,例如57u8
,同时也允许使用_
做为分隔符以方便读数,例如1_000
。 - debug 构建中 rust 会检查整形溢出并报错。
- release 构建中不会检查溢出,会进行二进制补码包装。
u8
赋值256
会变成0
,赋值257
会变成1
,以此类推。标准库wrapping
类型显示这种行为。
浮点型
- f32 和 f64 两个浮点数据类型。
- 默认 f64 类型,因为在现代 cpu 中性能差异不大的前提下 f64 精度更高。
- 基本运算:
|
|
布尔型
- 用 bool 表示,只有两个可能的值:
true
false
。
|
|
字符类型
- 字符串用双引号引起来。
- 单引号表示 char 类型,大小为 4 个字节,代表一个 Unicode 标量值但是又有所区别,是 rust 特有的原生字符类型。
复合类型
- 多个值组合的类型。包含元组(tuple)和数组(array) 两个原生复合类型。
元组
- 元素可包含不同类型,声明后长度不可变。
|
|
数组类型
- 区别于元组,数组的元素类型必须是相同的。长度不可变,标准库中提供 vector 类型可实现可变长度数组。
- 声明方式:
|
|
- 下标溢出时编译期不会出错但是会产生 runtime 错误。
函数
- 基本函数结构
|
|
- 名称都是小写字母构成,用下划线
_
隔开单词。 - 函数体由一系列的语句和一个可选的结尾表达式构成。
- 语句指没有返回值的指令,如
let y = 6;
,表达式执行一些计算操作并且有返回值。 - 不能将语句赋值给变量。
- 语句可以包含表达式,一般的语句以
;
结束,表达式后面不跟分号。 - rust 是一个基于表达式的语言。
具有返回值的函数
|
|
- 可以用 return 提前返回值。