2023-02-02 约 900 字 预计阅读 2 分钟
阅读Rust程序设计语言 笔记
变量和可变性
变量默认是不可改变的(immutable)
可变变量,需要加 mut 修饰 let mut x = 5
常量 使用 const 定义
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
需要申明常量类型
常量只能被设置为常量表达式,不能是运行时计算出的值 (和变量区别)
隐藏,变量遮蔽。重新申明变量,前面申明的变量会隐藏
隐藏时,可以改变变量类型
数据类型
指定数据类型,或者可以推断出数据类型;
标量类型:整型,浮点型,布尔型,字符型
整形
有符号,无符号
8,16,32,64,128,arch 几种长度
支持下划线分隔符
整形溢出,debug 会panic;release 会忽略高位
数字可以加后缀 123u16
16位的数字 123
浮点型
f32,f64;
IEE-754
数值运算
整数除法,四舍五入
bool true|false
字符类型
四个字节,一个Unicode标量
复合类型
元组
申明后长度不会增大缩小;类型不必相同
通过模式匹配解构(destructuring)元组值
通过(.) 加索引访问
let x: (i32, i64, f32) = (100, 0, .3)
数组
长度固定;类型必须相同;
不固定长度,需要使用vector 类型(标准库提供)
let a = [1,2,3,4,5]
let a: [i32; 5] = [1,2,3,4,5];
指定类型
let a = [3;5]
创建5个3
访问超出界限,会panic
函数
加分号是语句,不加分号是表达式(又返回值)
1
2
3
4
5
6
7
8
fn a_func ( x : i32 ){
println! ( "hello world" );
}
// 返回值类型是i32,返回数据是5
fn five () -> i32 {
5
}
注释
// 注释
/// 文档注释
控制流
if 语句
条件不用加括号
必须bool类型,不能自动转换
可以使用let语句赋值
1
2
3
4
5
6
7
8
9
10
11
12
// if 不用加括号
// 必须是bool类型,不会自动转换
if number < 5 {
println! ( "" )
} else if number % 3 == 0 {
println! ( "" )
} else {
println! ( "" )
}
// if else 返回类型必须相同
let number = if condition { 5 } else { 6 };
循环 (loop while/for)
break 中断; 可以带返回值中断
1
2
3
4
5
6
7
let result = loop {
counter += 1 ;
if counter == 10 {
break counter * 2 ; // result 赋值为20
}
}
多个循环之间消除歧义
标签 ‘counting_up (这个好诡异)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fn main () {
let mut count = 0 ;
'counting_up : loop {
println! ( "count = {count} " );
let mut remaining = 10 ;
loop {
println! ( "remaining = {remaining} " );
if remaining == 9 {
break ;
}
if count == 2 {
break 'counting_up ;
}
remaining -= 1 ;
}
count += 1 ;
}
println! ( "End count = {count} " );
}
while 条件循环
1
2
3
4
while index < 5 {
println! ( "the valeue is: {} " , 123 )
index += 1 ;
}
for 循环
1
2
3
for number in ( 1 .. 4 ). rev () { // rev 反转; 遍历 1到4
println! ( " {number} " )
}