我可以在闭包中通过引用捕获一些内容,而通过值捕获其他内容吗?

2024-01-01

假设我们有以下代码,我在其中定义了一个名为的闭包closure。在这个闭包中,我想使用外部x通过不可变引用(&T),同时使用y通过取得所有权。我怎样才能做到这一点?如果我使用move,闭包中使用的所有外部变量都将移至闭包中。这里还有外部变量y是可复制的。

let x: i32 = 1;
let y: i32 = 2;
let closure = || {
    println!("{}", x);  // make sure x is used by &T.
    // println!("{}", y);  // how can I use y by taking its ownership?
};
closure();

请注意,通过移动参考进行捕获等于通过参考进行捕获。

当您添加一个move关键词到闭包,是的,一切都是通过移动来捕捉的。但是你可以移动一个引用,这就是没有闭包的情况move关键字确实如此。

let x: i32 = 1;
let y: i32 = 2;
let closure = {
    let x = &x;
    move || {
        println!("{}", x);  // borrowing (outer) x
        println!("{}", y);  // taking the ownership of y
    }
};
closure();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在闭包中通过引用捕获一些内容,而通过值捕获其他内容吗? 的相关文章

随机推荐