流程控制

判断

if

Rust的if语句需要注意以下两点:

  1. if是表达式,而不是语句。
  2. 判断条件不需要用小括号括起来。
// if
if expr1 {

}

// if-else
if expr1 {

} else {

}

// if-(else if)-else
if expr1 {

} else if exprN {  // 允许多个 else if 

} else {

}

要注意 if 语句后没有括号(...),

另外 if 的判断表达式必须是个boolean类型的,否则编译不通过。

条件表达式

Rust不通过三元运算表达式 ? = ,因为可以直接依靠if语句的能力,直接返回表达式。

例:基于if语句的表达式

let x = 5;

let y = if x == 5 {
    10
} else {
    15
};

或者,直接压缩成一行:

let x = 5;
let y = if x == 5 { 10 } else { 15 }; // y: i32

需要注意,let if语句的不同分支必须返回相同数据类型,否则无法通过编译。

例:如下代码片段无法编译通过。

let number = if condition {
    5
} else {
    "six"
}

必须是如下两种方式之一。

let number = if condition {
    5
} else {
    6
}
let number = if condition {
    "five"
} else {
    "six"
}

match

Rust没有switch,但有强大的match,可以方便的提供模式匹配。这与Scala非常相似。

let x = 5;
match x {
    1 => println!("one"),
    2 => println!("two"),
    3 => println!("three"),
    4 => println!("four"),
    5 => println!("five"),
    _ => println!("something else"),
}

更多关于match的使用,参看“模式匹配”。

循环

for

Rust中的for用于遍历迭代器。这与Python一致。

for var in iterator {
    // code
}

例:打印 0~9。

for x in 0..10 {
    println!("{}", x);
}

例:反序打印0~9。

for x in (0..10).rev() {
    println!("{}", x);
}

在遍历的过程中,若需要获取索引值,只需要对集合调用enumerate()函数即可。

例:使用enumerate函数,打印索引值与数值。

for (i,j) in (5..10).enumerate() {
    println!("i = {} and j = {}", i, j);
}

打印输出:

i = 0 and j = 5
i = 1 and j = 6
i = 2 and j = 7
i = 3 and j = 8
i = 4 and j = 9

例:打印出 行号与行内容。

let lines = "Content of line one
Content of line two
Content of line three
Content of line four".lines();
for (linenumber, line) in lines.enumerate() {
    println!("{}: {}", linenumber, line);
}

打印输出:

0: Content of line one
1: Content of line two
2: Content of line three
3: Content of line four

while

Rust中的while与其他语言中的while一致。唯一需要注意的是,条件表达式不需要括号。

while expression {
    // code
}

loop

Rust中的loop用于方便实现无限循环。

loop {
    // cide
}

该段代码等价于:

while true {
    // code
}

例:

let mut x = 5;
let mut done = false;

while !done {
    x += x - 3;

    println!("{}", x);

    if x % 5 == 0 {
        done = true;
    }
}

break 与 continue

跳出循环:

  • break 跳出当前循环。
  • continue 带到当前循环的下一次迭代。

例:

let mut x = 5;

loop {
    x += x - 3;

    println!("{}", x);

    if x % 5 == 0 { break; }
}

label

与Java中的label一致。label用于在循环中跳到指定位置。

'outer: for x in 0..10 {
    'inner: for y in 0..10 {
        if x % 2 == 0 { continue 'outer; } // continues the loop over x
        if y % 2 == 0 { continue 'inner; } // continues the loop over y
        println!("x: {}, y: {}", x, y);
    }
}

results matching ""

    No results matching ""