闭包
Rust的闭包非常类似于其他语言的Lambda表达式。
一个简单的Rust闭包。
let plus_one = |x: i32| x + 1;
// 调用,返回2
plus_one(1);
其他写法
let plus_one = |x:i32| x + 1;
// 等价于
let plus_one = |x:i32| {x + 1};
let plus_one = |x:i32|->i32 {x + 1};
多行语句形成的闭包。
let plus_two = |x| {
let mut result:i32 = x;
result += 1;
result += 1;
result;
}
// 调用返回4
plus_two(2);
闭包本质上是一种特殊的函数。函数内部会依赖函数体外部的变量。
let num = 5;
let plus_num = |x:i32| x + num;
// 调用,返回10
plus_num(5);
闭包与所有权
move关键字
move关键字常用在闭包中,强制闭包获取所有权。
例:
fn main() {
let x: i32 = 100;
let some_closure = move |i: i32| i + x;
let y = some_closure(2);
println!("x={}, y={}", x, y); // 打印输出 x=100, y=102
}
说明:
闭包内的x获取被强制获取100的所有权。