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 的所有权已经被转移给了闭包

闭包的特性

  1. 闭包可以作为函数参数
  2. 闭包可以作为返回值
  • Fn: 不需要修改捕获的变量,闭包可以多次调用。
  • FnMut: 需要修改捕获的变量,闭包可以多次调用。
  • FnOnce: 只需要捕获所有权,闭包只能调用一次。

总结
闭包是一种强大的抽象,提供灵活且表达力强的方式来编写函数。
闭包可以捕获环境变量,可以作为参数传递或作为返回值。闭包和迭代器结合使用,方便的实现数据处理任务。

posted @ 2025-04-05 16:39  代码世界faq  阅读(16)  评论(0)    收藏  举报