4. Rust 基础
4.1 变量和可变性
4.1.1 常量
const xxx: type = ...
:常量使用const
来定义,且必须注明值的类型- 常量在声明它的作用域之中,常量在整个程序生命周期中都有效
4.1.2 隐藏(Shadowing)
- 隐藏(Shadowing):通过使用
let
,可以对一个不可变变量进行一些计算或者改变这个变量的类型,不过完成之后变量仍然是不可变的 - 隐藏 与 将变量标记为
mut
的区别一:当不小心尝试对变量重新赋值时,如果没有使用 let 关键字,就会导致编译时错误 - 隐藏 与 将变量标记为
mut
的区别二:当再次使用let
时,实际上创建了一个新变量,因此可以改变值的类型,并且复用这个名字
4.2 数据类型
4.2.1 Rust 必须指定数据类型
4.2.2 标量类型
-
整型
-
浮点型(整数除法为地板除)
-
布尔型
-
字符型(size为4个字节;字符用单引号
'
,字符串用双引号"
)
4.2.3 复合类型
- 元组
- 元组是一个将多个其他类型的值组合进一个复合类型的主要方式
- 元组长度固定:一旦声明,其长度不会增大或缩小
- 元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的
- 访问元组值:可以使用点号
.
后跟值的索引来直接访问 - 单元(unit) 元组:不带任何值的元组有个特殊的名称;这种值以及对应的类型都写作
()
,表示空值或空的返回类型;如果表达式不返回任何其他值,则会隐式返回单元值
- 数组
- 数组(array):与元组不同,数组中的每个元素的类型必须相同,且 Rust 中的数组长度是固定的
- 创建数组:在方括号中包含每个元素的类型(type),后跟分号
;
,再后跟数组元素的数量 - 访问数组:数组是可以在栈 (stack) 上分配的已知固定大小的单个内存块,可以使用索引来访问数组的元素
4.3 函数
fn
关键字:用来声明新函数;Rust 代码中的函数和变量名使用 snake case 规范风格(所有字母都是小写并使用下划线分隔单词)- 在函数签名中,必须声明每个参数的类型(type)
- Rust 不关心函数定义所在的位置,只要函数被调用时出现在调用之处可见的作用域内就行
-
参数
-
语句和表达式
- Rust 是一门基于表达式(expression-based)的语言
- 语句只会执行操作,但不返回值;而表达式会计算出一个值
- 注意:表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值!
- 函数返回值
- 函数的返回值等同于函数体最后一个表达式的值(因此,大部分函数隐式的返回最后的表达式)
- 使用
return
关键字和指定值,可从函数中提前返回
4.4 注释
//
4.5 控制流:if与循环
4.5.1 if 表达式
- 基础
2. 在 let 语句中使用 if
- 因为
if
是一个表达式,因此可以在let
语句的右侧使用它,但两个分支必须是相同类型的值!
4.5.2 loop 循环
- 基础
- 带标签的 loop 循环
- 用于在嵌套循环中 break 或 continue 指定循环(带上
loop
的前缀名)!
- 用于在嵌套循环中 break 或 continue 指定循环(带上
- 从 loop 循环返回值
- 在
break
后跟上返回值