面试题答案
一键面试Fn trait与闭包捕获环境变量的关系
在Rust中,Fn
trait是闭包实现的三个核心trait之一(另外两个是FnMut
和FnOnce
)。当一个闭包实现Fn
trait时,意味着这个闭包可以被多次调用,并且调用过程中不会对其捕获的环境变量进行移动或可变借用。
捕获方式特点
- 不可变借用:闭包实现
Fn
trait时,对环境变量进行不可变借用。这意味着闭包可以读取捕获的变量,但不能修改它们。 - 多次调用安全:由于只是不可变借用,闭包可以被多次调用,不会影响环境变量的状态。
代码示例
fn main() {
let x = 5;
let closure = || println!("The value of x is: {}", x);
closure();
closure();
}
在上述代码中,闭包closure
捕获了环境变量x
。因为闭包实现了Fn
trait,所以对x
进行不可变借用。我们可以多次调用closure
,并且x
的值在调用过程中保持不变。