假设我们有以下代码,我在其中定义了一个名为的闭包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(使用前将#替换为@)