Rust学习 (六) 分支循环

2020-09-16  本文已影响0人  Gascognya

if 表达式

{
    println!("number was three");
}


if number {
    println!("number was three");
}

请问上面两者有何区别?

第一个是我们之前说的代码块。第二个是我们熟知的if语句。
仔细一看,两者貌似只差别在一个条件判定。真值才会执行。

实际上,就是如此。if 表达式,说明if也是一种表达式。可以具有返回值。

let number = if condition {
        5
};

那么这样的语句是否可以呢?
答对了一半,这样的逻辑是对的,但是忽略了一点。if条件如果不被执行,那么let number =就会出现错误,rust是一门十分严谨的语言,这样危险的错误是不可以的。为了无论如何,number都可以被赋一个值。我们需要加上else

let number = if condition {
    5
} else {
    6
};

这样是被允许的,这和python中的if else简化形式含义相同

number = 5 if condition else 6

并且要注意,rust中的if表达式,if和else的返回值类型要相同,不然显而易见也会出现错误。

loop 表达式

let mut counter = 0;
let result = loop {
    counter += 1;

    if counter == 10 {
        break counter * 2;
    }
};

loop表达式是一种无限循环,直到发生错误或者break
因为是表达式,所以也可以有返回值,其返回值是break语句后的内容。

while 循环

while循环

    let mut number = 3;

    while number != 0 {
        println!("{}!", number);
        number = number - 1;
    };

在while中是不能用break来返回一些值的,所有while true最好都替换成loop,两者在编译时有本质区别。

for 循环

    let num_arry = [10, 20, 30, 40, 50];
    for num in num_arry.iter() {
        println!("{}!", num)
    }

    for i in 1..5 {
        println!("{}!", i)
    }

for ... in ...这么方便的功能自然是少不了的

上一篇下一篇

猜你喜欢

热点阅读