MST

星途 面试题库

面试题:Rust中Fn trait自定义实现的基础理解

在Rust中,简述Fn trait的作用。如果要自定义实现一个结构体使其满足Fn trait,需要满足哪些条件?请给出一个简单的结构体及实现Fn trait的示例代码。
34.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Fn trait的作用

Fn trait 是 Rust 中闭包相关的三个核心 trait 之一,它表示可以像函数一样被调用的类型。实现了 Fn trait 的类型可以使用 () 调用运算符进行调用。这使得 Rust 中的闭包可以像普通函数一样使用,增强了代码的灵活性和表达力。

自定义结构体实现Fn trait的条件

  1. 结构体必须有一个实现 Fn trait 的 call 方法,该方法接受与闭包调用时相同的参数,并返回与闭包返回值相同的类型。
  2. 结构体不能移动或修改自身状态,因为 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 实例并像调用函数一样调用它。