rust编程教程中文:一起学Rust编程,4
今天我们来看Rust里的分支和循环。前半部分是熟悉的if/else分支和for循环;后半部分我们一起来看比较特别的模式匹配。
if/else基本语法:
if <condition> { // code} else if <condition> { // code}
比如:
if 3 > 2 { println!("3 is greater than 2");} else { println!("3 is not greater than 2");}
执行上面的代码输出“3 is greater than 2″。
if不单单是语句而是表达式,所以可以用于赋值语句(注意作为返回值的表达式true和false没有加分号):
let world_is_sane = if 3 > 2 { println!("3 is greater than 2"); true } else { println!("3 is not greater than 2"); false };
这个写法比起C语言的三元运算来说清晰很多。
记得所有的分支都得返回同一个类型的值,否则编译器会报错。比如如果我把false误写成了0:
Rust做了极大的努力保证编译错误信息清晰易读。如果对出错原因不太清楚,可以按最后的提示查看语法的说明:rustc --explain E0308,这个特性真的很友好。
loop/while/forRust有3个循环语法。
loop是无条件循环
loop { // code}
while和for是有条件循环
while <condition> { // code}for i in 0..100 { // code}
loop和for有一些别的语法糖,包括返回值,用于嵌套break的标签,闭区间和迭代器,我们暂时不去管它。在语言学习中,语法是一个跟使用时间成正比的肌肉记忆工作,很多用法在初学阶段并不是必需的,可以在后面使用中慢慢熟悉。
模式匹配match最基本的match语句类似一个精简的if ... else if ... else if ...else,也就是对一个条件表达式分情况讨论:
let number = 10; match number { 1..=9 => println!("1"), 10..=99 => println!("2"), 100..=999 => println!("3"), _ => println!("too many") }
=>左边的部分是匹配条件。可以是单个的值,也可以是x..=y的闭区间,a | b | c 匹配多个值之一,或者_表示其他情况。
=>右边的部分是匹配成功对应的表达式,以逗号结尾。
Rust语法要求match条件是完备的,也就是分支必须覆盖所有可能的情况。也就是说大多数时候,必须有一个默认分支_ => ...。
在Rust的设计里,基本不存在使用默认的或者隐含的逻辑的余地,而是尽量鼓励开发者去考虑所有可能的情况。这对写出健壮的代码非常有用。
match也可以用作表达式:
let number = 10;let digits = match number { 1..=9 => 1, 10..=99 => 2, 100..=999 => 3, _ => -1,}
match还可以对元组,枚举,指针和结构体做解构匹配(destructuring match)。用我们已经见过的元组为例:
let p = (1, 0); let non_zero_value = match p { (x, 0) => x, (0, y) => y, _ => -1, };
这种语法对枚举值非常有用,我们在后面学习枚举类型时会大量用到。
最后,我们结合一个新的print!语法来打印九九乘法表。跟println!()一样,这里唯一的新语法就是可以用{}来打印一个标量的值:
fn main() { for a in 1..10 { for b in a..10 { let newline = if b == 9 { "\n" } else { " " }; print!("{}x{}={}{}", a, b, a * b, newline); } }}
关注红小豆,一起学习Rust开发。欢迎点赞,转发,收藏!
- 03-0704年奥迪a6钥匙全丢匹配教程:10-12年奥迪A6L钥匙全丢免拆匹配方法操作
- 12-15属狗的一生最旺的时辰,一生中最倒霉的年龄揭示
- 01-04泰剧noon逗爱 泰剧逗爱藩篱,女神Noon魅力依旧
- 05-16等离子除尘除静电:除静电离子风棒在无尘车间的应用
- 04-20海南中招提前批每个人都可报名吗?早安自贸港丨海南中招补录阶段征集志愿将于24日截止
- 12-29守护这座城市暖人的温度:这些身影守护着我们的城......
- 09-26魔爪mini-mx 拍摄教学,手机拍大片就用魔爪MiniMX-跟着模板拍摄
- 12-02黄自元简介,黄自元读书乐
- 04-28床在卧室怎么摆放比较好?床在卧室的最佳摆放位置
- 04-21miui最新版本要不要更新系统 老手机不敢升级新系统
- 03-02爸爸做的家庭作业:父亲的作业本
- 02-07win10网络出现黄色感叹号怎么解决?WIN10右下角网络图标有黄色感叹号
- 03-15芝麻胡同39集的介绍:老中青实力派倾情加盟
- 04-25高中数学导数近五年高考题及答案:导数的运算及几何意义-2022学年高二数学下学期期中期末必考题精
- 01-03二元母猪和生猪有啥区别,猪身上两块,肉
- 10-16打造特色蓝莓产业:越州镇,三化
热门
推荐
- 1超级萌婴儿摄影作品499
- 2伤仲永教学设计反思4篇175
- 3爸爸给孩子鼓励的一封信满分模板460
- 42020年社区卫生工作计划220
- 5联想笔记本电脑怎么更换内存和硬盘381
- 6写给七年后的自己268
- 7《海贼王》观后感范文298
- 8恐龙十大科学真相218