【问题标题】:Why can I still use a variable captured by a `move` closure?为什么我仍然可以使用由 `move` 闭包捕获的变量?
【发布时间】:2019-06-16 12:15:20
【问题描述】:

我编写了一个 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 在这种情况下实际上做了什么。关闭后我仍然可以使用amove 在这里实际上做了什么?

【问题讨论】:

    标签: rust


    【解决方案1】:

    move 在这里实际上做了什么?

    它将变量移动到闭包中。

    关闭后我仍然可以使用a

    a 是一个实现Copy&amp;'static char。当您在移动后使用该值时,编译器会自动插入该值的副本。

    另见:

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多