在 Rust 中,函数是代码的基本构建块,用于封装可重用的逻辑。每个 Rust 程序都至少包含一个 main 函数,它是程序的入口点。本文将详细介绍如何定义和调用函数,包括参数传递、返回值等关键概念。

函数的基本定义

使用 fn 关键字来定义一个函数,后跟函数名、参数列表和返回类型。函数体用花括号 {} 包裹。例如,定义一个简单的函数来打印问候语:

fn greet() {
    println!("Hello, Rust!");
}

在这个例子中,greet 函数没有参数和返回值,它只是执行一个打印操作。要调用这个函数,只需在代码中写出函数名加括号:

fn main() {
    greet(); // 调用 greet 函数
}

注意:Rust 中的函数名通常使用蛇形命名法(snake_case),例如 calculate_sum

参数与返回值

函数可以接受参数并返回值。参数在函数名后的括号内声明,每个参数需要指定类型。返回值类型在参数列表后使用 -> 符号指定。例如,定义一个函数来计算两个整数的和:

fn add(x: i32, y: i32) -> i32 {
    x + y // 在 Rust 中,最后一个表达式自动作为返回值,无需 return 关键字
}

你也可以使用return关键字返回值:

fn add(x: i32, y: i32) -> i32 {
    return x + y; // 使用 return 返回
}

调用这个函数时,需要传递两个整数参数:

fn main() {
    let result = add(5, 3);
    println!("Sum: {}", result); // 输出: Sum: 8
}

如果函数没有返回值,可以省略 -> 部分,或者指定返回类型为 ()(单元类型)。例如:

fn print_message(msg: &str) {
    println!("{}", msg);
}

函数嵌套

函数可以在其他函数内部定义,但内部函数的作用域仅限于外层函数。例如:

fn outer() {
    fn inner() {
        println!("Inner function");
    }
    inner(); // 只能在 outer 函数内调用
}

注意:避免在函数中定义过多嵌套函数,这可能导致代码难以维护。通常建议将逻辑拆分为独立的函数。