编写 Rust 函数

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何在 Rust 中编写函数。函数使用 fn 关键字声明,其参数需进行类型标注。如果有返回类型,则在箭头 -> 之后指定。函数中的最后一个表达式用作返回值,但也可以使用 return 语句提前返回一个值。本实验提供了一个使用函数重写 FizzBuzz 程序的示例,展示了返回布尔值的函数、返回单元类型 () 的函数以及未指定返回类型的函数的用法。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,并通过 rustc main.rs &&./main 进行编译和运行。

函数

函数使用 fn 关键字声明。其参数和变量一样要进行类型标注,如果函数返回一个值,则必须在箭头 -> 之后指定返回类型。

函数中的最后一个表达式将用作返回值。或者,也可以使用 return 语句在函数内部提前返回一个值,甚至可以从循环或 if 语句内部返回。

让我们用函数重写 FizzBuzz!

// 与 C/C++ 不同,函数定义的顺序没有限制
fn main() {
    // 我们可以在这里使用这个函数,并在后面的某个地方定义它
    fizzbuzz_to(100);
}

// 返回布尔值的函数
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // 边界情况,提前返回
    if rhs == 0 {
        return false;
    }

    // 这是一个表达式,这里不需要 `return` 关键字
    lhs % rhs == 0
}

// “不”返回值的函数,实际上返回单元类型 `()`
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// 当一个函数返回 `()` 时,返回类型可以在签名中省略
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

总结

恭喜你!你已经完成了函数实验。你可以在 LabEx 中练习更多实验来提升你的技能。