MST

星途 面试题库

面试题:Rust中FnMut trait闭包特性的基础应用

请解释在Rust中,FnMut trait闭包与Fn trait闭包有何不同。并编写一个简单的示例,展示FnMut闭包如何修改其捕获的环境变量。
49.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. FnMut trait闭包与Fn trait闭包的不同

    • Fn trait闭包:实现Fn trait的闭包是不可变借用闭包,意味着它可以多次调用,并且不会修改捕获的环境变量。它使用&self调用约定,类似于调用普通的不可变方法。
    • FnMut trait闭包:实现FnMut trait的闭包可以修改其捕获的环境变量。它使用&mut self调用约定,这允许闭包对捕获的变量进行可变访问。所有实现Fn的闭包也自动实现FnMut,因为不可变借用可以升级为可变借用,但反之则不成立。
  2. 示例代码

fn main() {
    let mut counter = 0;
    let mut increment = || counter += 1;
    increment();
    println!("Counter: {}", counter);
}

在上述代码中,increment闭包捕获了counter变量,并通过FnMut闭包对其进行修改。每次调用increment闭包时,counter的值会增加1。