Rust 函数定义、参数类型与表达式返回值详解

Ryan
Ryan
发布时间:2026-10-15 | 2人浏览过
原创

本文详细解析 Rust 中的函数编写规范。内容涵盖函数定义的 snake_case 命名、强类型参数校验机制,并深入区分语句与表达式的差异。重点说明如何通过消除尾部分号来实现隐式返回值,以及利用 Tuple 结构体处理多个返回值的操作技巧。

函数基础定义

Rust 语言的函数采用 snake_case(小写加下划线)作为命名规范。定义函数时使用 fn 关键字,主体由花括号包裹。main 函数作为程序的入口点,负责承载业务逻辑的启动。

在同一个作用域(scope)内调用其他包下的函数时,需确保该函数可见。函数调用的顺序不依赖其在文件中的排列位置,编译器会进行符号解析。

fn main() {
    println!("Hello, world!");
    another_function();
}

fn another_function() {
    println!("Another function.");
}

参数传递与类型推断

Rust 的函数参数支持自定义类型,且编译器不具备自动推断入参类型的能力。必须在参数名后使用冒号和空格明确标注数据类型,例如 x: i32。这一设计旨在提高编译错误信息的精准度。

当需要传递多个参数时,可使用逗号分隔不同类型:

fn print_labeled_measurement(value: i32, unit_label: char) {
    println!("The measurement is: {value}{unit_label}");
}

fn main() {
    print_labeled_measurement(5, 'h');
}

语句与表达式的执行差异

Rust 是一门基于表达式的语言,理解“语句”与“表达式”的区别至关重要:

  • 语句 (Statements):仅执行动作(如变量绑定),不产生返回值。例如:let y = 6;。
  • 表达式 (Expressions):计算过程并生成一个确定的值,可作为赋值的一部分。例如:6 或 x + 1。

由于表达式具备返回值,而语句没有,因此不能将语句作为表达式的一部分。这也意味着 Rust 不支持类似 C/C++/Java 的链式赋值语法。

第1步:确认表达式无尾部分号

目的:确保函数能正确返回所需的类型值。 在 Rust 函数体中,最后一行若包含分号,会被视为语句而非表达式,导致返回值缺失或变成空元组。

// 正确写法:隐式返回整数 6
fn add_one(x: i32) -> i32 {
    x + 1
}

// 错误写法:末尾的分号将其转为语句,函数实际返回值为 ()
fn broken_add_one(x: i32) -> i32 {
    x + 1;
}

上述错误会导致编译阶段出现 mismatched types(类型不匹配)报错,因为函数声明了返回 i32,但实际返回的是空元组 ()。

多返回值处理

Rust 并不支持 Go 语言风格的命名多返回值,而是通过返回 Tuple(元组)来实现同一函数传出多个结果。返回时需要完整保留圆括号。

// 返回类型为 (i32, i32)
fn swap(x: i32, y: i32) -> (i32, i32) {
    (y, x)
}

fn main() {
    // 解构获取值
    let (a, b) = swap(10, 20);
    println!("{} {}", a, b); 
}

注释编写规范

在 Rust 源码中添加注释主要分为以下两种:

  1. 普通注释:使用双斜杠 //。适用于单行或多行的内部逻辑解释,不会生成外部文档。
  2. 文档注释:使用三斜杠 /// 写在函数上方。这种格式允许工具为公有函数自动生成 HTML API 文档,通常建议包含示例代码块。
// 普通行注释
let lucky_number = 7;

/// 功能描述...
///
/// # Examples
/// ```
/// let result = my_func(5);
/// assert_eq!(result, 6);
/// ```
pub fn add_one(x: i32) -> i32 {
    x + 1
}

以上就是Rust 函数定义、参数类型与表达式返回值详解的详细内容,更多关于Rust 基础教程的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表