19 rust基础-闭包
闭包是一种匿名函数,他可以捕获并存储其环境中的变量。
捕获外部变量
- 按引用捕获(默认行为,类似 &T)
- 按值捕获(类似 T)
- 可变借用捕获(类似 &mut T)
let x = 5;
let square = |num| num * x;
println!("{}", square(3)); // 输出: 15
移动与借用
闭包可以通过 move 关键字获取外部变量的所有权,或者通过借用的方式获取外部变量的引用。例如:
借用变量:默认情况下,闭包会借用它捕获的环境中的变量,这意味着闭包可以使用这些变量,但不能改变它们的所有权。这种情况下,闭包和外部作用域都可以使用这些变量。
获取所有权:通过在闭包前添加 move 关键字,闭包会获取它捕获的环境变量的所有权。这意味着这些变量的所有权会从外部作用域转移到闭包内部,外部作用域将无法再使用这些变量。
let s = String::from("hello");
let print_s = move || println!("{}", s);
print_s(); // 输出 "hello"
// println!("{}", s); // 这行代码将会报错,因为 s 的所有权已经被转移给了闭包
闭包的特性
- 闭包可以作为函数参数
- 闭包可以作为返回值
- Fn: 不需要修改捕获的变量,闭包可以多次调用。
- FnMut: 需要修改捕获的变量,闭包可以多次调用。
- FnOnce: 只需要捕获所有权,闭包只能调用一次。
总结
闭包是一种强大的抽象,提供灵活且表达力强的方式来编写函数。
闭包可以捕获环境变量,可以作为参数传递或作为返回值。闭包和迭代器结合使用,方便的实现数据处理任务。

浙公网安备 33010602011771号