为什么我仍然可以使用被`move`闭包捕获的变量?

3

我编写了一个Rust程序,用于生成所有小写英文字母的两个字母排列(“aa”,“ab”……“zy”,“zz”):

fn main() {
    static ASCII_LOWER: [char; 26] = [
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
    ];

    let x: Vec<_> = ASCII_LOWER.iter().flat_map(|a| {
        let result = ASCII_LOWER.iter().map(move |b| {
            format!("{}{}", a, b)
        });

        dbg!(a);  // <--- How can `a` still be used?

        result
    }).collect();

    dbg!(x);
}

我需要将内部闭包标记为move,否则对a的捕获借用就无法存活。然而,我不明白在这种情况下move实际上是什么意思。我仍然可以在闭包之后使用a。那么move在这里实际上是做什么的呢?

1个回答

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接