当前位置:蜗牛素材网>综合资讯>科技>正文

rust编程教程中文:一起学Rust编程,4

人气:221 ℃/2024-03-03 04:30:56

今天我们来看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/for

Rust有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开发。欢迎点赞,转发,收藏!

搜索更多有关“rust编程教程中文:一起学Rust编程,4”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
本网站部分内容、图文来自于网络,如有侵犯您的合法权益,请及时与我们联系,我们将第一时间安排核实及删除!
CopyRight © 2008-2024 蜗牛素材网 All Rights Reserved. 手机版