函数
一个 Rust 版本的著名面试问题 FizzBuzz:
fn main() { fizzbuzz_to(20); // 在下面定义了,不需要预先定义 } fn is_divisible_by(lhs: u32, rhs: u32) -> bool { if rhs == 0 { return false; // 特例,提前返回 } lhs % rhs == 0 // 代码块的最后一个表达式即返回值value } fn fizzbuzz(n: u32) -> () { // 没有返回值表示返回单元类型 `()` match (is_divisible_by(n, 3), is_divisible_by(n, 5)) { (true, true) => println!("fizzbuzz"), (true, false) => println!("fizz"), (false, true) => println!("buzz"), (false, false) => println!("{n}"), } } fn fizzbuzz_to(n: u32) { // `-> ()` 通常被省略 for i in 1..=n { fizzbuzz(i); } }
-
我们在
main
中提到一个下面写的函数。既不需要预先声明,也不需要头文件。 -
声明的参数后跟一个类型(有些编程语言是相反的),然后是一个返回值类型。
-
函数体(或任何代码块)的最后一个表达式会成为返回值。简单地省略表达式结尾的
;
。 -
fizzbuzz_to()
里的for
循环的范围表达式包含=n
,这让它包含了上边界。 -
fizzbuzz()
里的match
表达式做了很多工作。下面会展开以展示发生了什么。(为了更清晰,添加了类型标注,但是可以省略。)
let by_3: bool = is_divisible_by(n, 3); let by_5: bool = is_divisible_by(n, 5); let by_35: (bool, bool) = (by_3, by_5); match by_35 { // ...