函数与方法

函数

要声明一个函数,需要使用关键字fn,后面跟上函数名,比如

fn add_one(x: i32) -> i32 {
    x + 1
}

其中函数参数的类型不能省略,可以有多个参数,但是最多只能返回一个值, 提前返回使用return关键字。Rust编译器会对未使用的函数提出警告, 可以使用属性#[allow(dead_code)]禁用无效代码检查。

Rust有一个特殊特性适用于发散函数 (diverging function),它不返回:

fn diverges() -> ! {
    panic!("This function never returns!");
}

其中panic!是一个宏,使当前执行线程崩溃并打印给定信息。返回类型!可用作任何类型:

let x: i32 = diverges();
let y: String = diverges();

匿名函数

Rust使用闭包 (closure) 来创建匿名函数:

let num = 5;
let plus_num = |x: i32| x + num;

其中闭包plus_num借用了它作用域中的let绑定num。如果要让闭包获得所有权, 可以使用move关键字:

高阶函数

Rust 还支持高阶函数 (high order function),允许把闭包作为参数来生成新的函数:

方法

Rust通过impl关键字在structenum或者trait对象上实现方法调用语法 (method call syntax)。 关联函数 (associated function) 的第一个参数通常为self参数,有3种变体:

  • self,允许实现者移动和修改对象,对应的闭包特性为FnOnce

  • &self,既不允许实现者移动对象也不允许修改,对应的闭包特性为Fn

  • &mut self,允许实现者修改对象但不允许移动,对应的闭包特性为FnMut

不含self参数的关联函数称为静态方法 (static method)。

Last updated

Was this helpful?