面试题答案
一键面试Fn trait的作用
Fn
trait 是 Rust 中闭包相关的三个核心 trait 之一,它表示可以像函数一样被调用的类型。实现了 Fn
trait 的类型可以使用 ()
调用运算符进行调用。这使得 Rust 中的闭包可以像普通函数一样使用,增强了代码的灵活性和表达力。
自定义结构体实现Fn trait的条件
- 结构体必须有一个实现
Fn
trait 的call
方法,该方法接受与闭包调用时相同的参数,并返回与闭包返回值相同的类型。 - 结构体不能移动或修改自身状态,因为
Fn
代表的是不可变借用调用,即调用闭包时不会获取闭包环境的所有权,也不会修改闭包环境。
示例代码
struct Adder {
num: i32,
}
impl std::ops::Fn(i32) -> i32 for Adder {
fn call(&self, x: i32) -> i32 {
x + self.num
}
}
fn main() {
let adder = Adder { num: 5 };
let result = adder(3);
println!("Result: {}", result);
}
在上述代码中,Adder
结构体实现了 Fn
trait,call
方法接受一个 i32
类型的参数并返回一个 i32
类型的值,实现了加法功能。在 main
函数中,创建了 Adder
实例并像调用函数一样调用它。