闭包

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的所有权。

results matching ""

    No results matching ""