Rust笔记 - closures

274 阅读1分钟

closure相比于函数最大的区别是,能够保存环境变量。下面一些例子。


在闭包中引用不可变环境变量:

fn main() {
    let i = 1;
    let f = |mut index| -> i32 {
        index += i;
        index
    };

    assert_eq!(f(1), 2);
}

在闭包中引用可变环境变量:

fn main() {
    let mut i = 1;
    let mut f = |mut index| -> i32 {
        i += 1;
        index += i;
        index
    };

    assert_eq!(i, 2);
    assert_eq!(f(1), 3);
}

将环境变量转移到闭包中:

fn main() {
    let mut i = 1;
    let mut f = move |mut index| -> i32 {
        i += 1;
        index += i;
        index
    };

    assert_eq!(i, 1);
    assert_eq!(f(1), 3);
}