< 返回版块

FreeWong 发表于 2019-09-28 11:36

闭包可以通过以下手段捕获变量:

通过引用:&T 通过可变引用:&mut T 通过值:T

// 不可复制类型(non-copy type)。
    let movable = Box::new(3);

    // `mem::drop` 要求 `T` 类型本身,所以闭包将会捕获变量的值。这种情况下,
    // 可复制类型将会复制给闭包,从而原始值不受影响。不可复制类型必须移动
    // (move)到闭包中,因而 `movable` 变量在这里立即移动到了闭包中。
    let consume = || {
        println!("`movable`: {:?}", movable);
        mem::drop(movable);
    };

请问在 println! 那一行对变量 movable 的捕获是通过不可变引用 在mem:drop 那一行对变量 movable 的捕获是通过值

也就是说,闭包中可以对相同变量以不同的捕获形式来多次捕获变量,我的理解正确吗?

多谢

评论区

写评论
Mike Tang 2019-09-28 22:41

非,你的理解是错误的。

1 共 1 条评论, 1 页