rust闭包/匿名函数

作者:iohannes 发布时间: 2025-05-31 阅读量:17

闭包的基本语法

闭包的语法如下:

|参数列表| -> 返回类型 { 代码块 }
  • |参数列表|:闭包的参数列表,用竖线 | 包裹。
  • -> 返回类型:可选的返回类型声明。
  • { 代码块 }:闭包的主体代码。

带参数的闭包

let add = |a: i32, b: i32| -> i32 { a + b };
println!("Result: {}", add(5, 3)); // 输出:Result: 8
  • 这是一个简单的闭包,接受两个 i32 参数并返回它们的和。

使用外部变量的闭包

let x = 5;
let print_x = || {
    println!("x = {}", x);
};
print_x(); // 输出:x = 5
  • 闭包可以捕获外部变量, 并得到了x的所有权。在这个例子中,闭包捕获了变量 x 并在内部使用它。

修改外部变量的闭包

let mut x = 5;
let mut add_to_x = || {
    x += 1;
};
add_to_x();
println!("{}", x); // 输出:6
  • 在这里,闭包捕获了 x 的可变引用。

函数参数的闭包

闭包常用于作为函数参数,例如 mapfilter 等迭代器适配器:

let numbers = vec![1, 2, 3, 4, 5];
let doubled: Vec<i32> = numbers.iter().map(|x| x * 2).collect();
println!("{:?}", doubled); // 输出:[2, 4, 6, 8, 10]
  • 在这个例子中,闭包 |x| x * 2 被传递给 map 方法,用于对每个元素进行操作。