主题
函数
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 是语句,不产生值。块、if、match、loop 是表达式。行尾分号把表达式变成语句,值被丢弃。
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)。
