闭包的基本语法
闭包的语法如下:
|参数列表| -> 返回类型 { 代码块 }
|参数列表|:闭包的参数列表,用竖线|包裹。-> 返回类型:可选的返回类型声明。{ 代码块 }:闭包的主体代码。
带参数的闭包
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的可变引用。
函数参数的闭包
闭包常用于作为函数参数,例如 map 和 filter 等迭代器适配器:
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方法,用于对每个元素进行操作。