rust笔记
Cargo.toml
标签
package
dependencies
Cargo.lock
-
可以保证二进制一致
-
cargo update更新本地注册表, 更新
Cargo.lock
常量
- 不可使用
mut,常量永远是不可变的 - 声明常量使用
const关键字,他的类型必须被标注 - 常量可以在任何作用域内进行声明,包括全局作用域
- 常量只可以绑定到敞亮表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值
- 在程序运行期间,常量在其声明的作用域内一直有效
-
命名规范: Rust里常量使用全大写字母,每个单词之间用下划线分开
-
例子
Const MAX_POINT:u32 = 100_000
数据类型
- Rust 是静态编译语言,在编译时必须知道所有变量的类型
- 基于使用的值,编译器通常能推断出他的具体类型
- 如果可能的类型比较多,则必须添加类型的标注,否则编译报错。
标量类型
- 标量类型代表单个的值。
- Rust有4个主要的标量类型
- 整数类型
- 浮点类型
- 布尔类型
- 字符类型
整数类型
整数类型没有小数部分
整数字面值
- 十进制
- 16进制:
0x开头 - 8进制:
0o开头 - 2进制:
0b开头 - Byte(u8): 例如
b'A'
除了 Byte 外,所有的数值字面值都允许使用类型后缀,如
57u8如果不清楚使用哪种可以使用rust相应的默认类型
整数的默认类型是i32,i32速度快,即使是64位系统
整数溢出
-
调试模式
运行时panic
-
release,不会检查整数溢出,溢出发生会进行环绕操作
浮点类型
f32和f64
f64是默认类型,因为两种速度差不多且f64精度更高
布尔类型
一个字节 符号bool
字符类型
- rust语言中char类型被用来描述语言中最基础的单个字符
- 占用4字节大小
- Unicode标量值,可以表示逼ASCLL多得多的字符内容:拼音、中日韩文、0长度空白字符、emoji
复合类型
复合类型可以将多个值放在一个类型里
rust 提供两种基础的复合类型,元组(Tuple)、数组
Tuple
- 可以将多个类型的多个值放在一个类型里
- 长度固定,一旦声明就无法改变
数组
- 将多个值放在一个类型里
- 长度固定
- 元素类型相同
Let a : [i32 : 5] = [1, 2, 3, 4, 5];
函数
- 声明使用fn关键字
语句和表达式
- 函数体是由一系列语句组成,可选的由一个表达式结束
- 语句时执行一些动作的指令
- 表达式会计算产生一个值
函数的返回值
-
在
->后面声明函数返回值的类型,但是不可以为返回值命名1
fn five() -> i32 { 5 }
-
Rust里面,返回值就是函数体里面最后一个表达式的值
-
若想要提前返回使用return关键字,并指定一个值
控制流
if表达式
-
条件必须是bool类型的
-
与条件相关联的代码块叫做分支
1 2 3 4 5
if number < 5 { println!("condition was true"); } else { println!("condition was false"); }
-
因为if 是个表达式,所以可以将它放在
let语句等好的右边,代码块的返回类型要求一致1
let number = if condition { 1 } else { 0 };
循环
loop
- 使用break告诉程序停止循环
while条件循环
1
while condition {}
for循环遍历集合
1
2
3
4
5
6
fn main() {
let a = [1, 2, 3, 4, 5];
for element in a.iter() { // element是一个引用 &i32
println!("value is {}", element);
}
}
Range
-
prelude提供
-
指定开始和结束, range生成它们之间的数字(不含结束)
-
rev可以反转range
1 2 3 4 5
fn main() { for element in (1..6).rev() { println!("value is {}", element); } }
所有权
- rust的核心特性