Skip to content

函数

fn 定义函数。参数必须标注类型,有返回值时用 -> T。函数体是一个块表达式:最后一条不加分号的表达式就是返回值;提前退出用 return

rust
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn describe(n: i32) -> &'static str {
    if n < 0 {
        return "neg";
    }
    "non-neg"
}

没有 -> 时返回 ()! 是 never 类型,表示函数不返回,例如 panic!、无限 loop

语句与表达式

let 是语句,不产生值。块、ifmatchloop 是表达式。行尾分号把表达式变成语句,值被丢弃。

rust
let y = {
    let x = 3;
    x + 1
};
assert_eq!(y, 4);

参数

没有默认参数,也没有命名参数语法。可选值用 Option,容易混淆的选项用结构体打包。

参数按所有权规则传入:T 移动或复制,&T / &mut T 借用。可变绑定要在参数上写 mut

rust
fn reset(mut n: i32) -> i32 {
    n = 0;
    n
}

这里的 mut n 只影响函数体内的绑定,调用方传进来的值已经 move(或 Copy)。

参考

基于 MIT 许可发布