if
表达式 Sway 支持 if、else 和 else if 表达式,可以根据条件分支代码。
例如:
fn main() {
let number = 6;
if number % 4 == 0 {
// do something
} else if number % 3 == 0 {
// do something else
} else {
// do something else
}
}
let
语句中使用 if
与 Rust 一样,if
在 Sway 中也是表达式。这意味着您可以在 let
语句的右侧使用 if
表达式,将结果分配给一个变量。
let my_data = if some_bool < 10 { foo() } else { bar() };
请注意,if
表达式的所有分支必须返回相同类型的值。
match
表达式 Sway 通过详尽的 match
表达式支持高级模式匹配。与 if
表达式不同,match
表达式在编译时断言所有可能的模式都已匹配。如果您没有处理所有模式,您将收到编译器错误,指示您的 match
表达式不完整。
match
表达式的基本语法如下:
let result = match expression {
pattern1 => code\*to_execute_if_expression_matches_pattern1,
pattern2 => code_to_execute_if_expression_matches_pattern2,
pattern3 | pattern4 => code_to_execute_if_expression_matches_pattern3_or_pattern4
...
- => code_to_execute_if_expression_matches_no_pattern,
}
以下是如何使用 match
表达式的一些示例:
script;
// helper functions for our example
fn on_even(num: u64) {
// do something with even numbers
}
fn on_odd(num: u64) {
// do something with odd numbers
}
fn main(num: u64) -> u64 {
// Match as an expression
let is_even = match num % 2 {
0 => true,
_ => false,
};
// Match as control flow
let x = 12;
match x {
5 => on_odd(x),
_ => on_even(x),
};
// Match an enum
enum Weather {
Sunny: (),
Rainy: (),
Cloudy: (),
Snowy: (),
}
let current_weather = Weather::Sunny;
let avg_temp = match current_weather {
Weather::Sunny => 80,
Weather::Rainy => 50,
Weather::Cloudy => 60,
Weather::Snowy => 20,
};
let is_sunny = match current_weather {
Weather::Sunny => true,
Weather::Rainy | Weather::Cloudy | Weather::Snowy => false,
};
// match expression used for a return
let outside_temp = Weather::Sunny;
match outside_temp {
Weather::Sunny => 80,
Weather::Rainy => 50,
Weather::Cloudy => 60,
Weather::Snowy => 20,
}
}
while
这是一个 while
循环的示例:
while counter < 10 {
counter = counter + 1;
}
您需要 while
关键字,一些条件(在本例中为 value < 10
),它将在每次迭代中进行评估,并且在大括号内({...}
)有一段代码,用于执行每次迭代。
for
这是一个计算数字向量之和的 for
循环的示例:
for element in vector.iter() {
sum += element;
}
您需要 for
关键字,包含变量名的某些模式,例如本例中的 element
,ìn
关键字,后跟一个迭代器,并且在大括号内({...}
)有一段代码,用于执行每次迭代。上面示例中的 vector.iter()
返回 vector
的迭代器。在每次迭代中,element
的值将被更新为迭代器中的下一个值,直到达到向量的末尾,并且 for
循环迭代结束。
break
和 continue
在 while
或 for
循环的主体内可以使用 break
和 continue
关键字。break
语句的目的是提前跳出循环:
fn break_example() -> u64 {
let mut counter = 1;
let mut sum = 0;
let num = 10;
while true {
if counter > num {
break;
}
sum += counter;
counter += 1;
}
sum // 1 + 2 + .. + 10 = 55
}
continue
语句的目的是在迭代中跳过循环的一部分,并直接进入下一次迭代:
fn continue_example() -> u64 {
let mut counter = 0;
let mut sum = 0;
let num = 10;
while counter < num {
counter += 1;
if counter % 2 == 0 {
continue;
}
sum += counter;
}
sum // 1 + 3 + .. + 9 = 25
}
如果需要,您也可以使用嵌套的 while
循环:
while condition_1 == true {
// do stuff...
while condition_2 == true {
// do more stuff...
}
}