Rust variable rebinding for closure
Posted 金庆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust variable rebinding for closure相关的知识,希望对你有一定的参考价值。
Rust variable rebinding for closure
From: https://rust-unofficial.github.io/patterns/idioms/pass-var-to-closure.html
Rust closure captures variables by reference by default.
You can use “move” keyword to change to move variables.
In most cases, some variables are moved, and some are referenced.
We can rebind variables in a separate scope before move to the closure.
use std::rc::Rc;
let num1 = Rc::new(1);
let num2 = Rc::new(2);
let num3 = Rc::new(3);
let closure = {
// `num1` is moved
let num2 = num2.clone(); // `num2` is cloned
let num3 = num3.as_ref(); // `num3` is borrowed
move || {
*num1 + *num2 + *num3;
}
};
Or we can use additional variables to move in the same scope:
let num2_clone = num2.clone();
let num3_ref = num3.as_ref();
let closure = move || {
*num1 + *num2_clone + *num3_ref
}
Using separate scope can reuse the variable name, which make the closure body clearer,
but need additional indent.
以上是关于Rust variable rebinding for closure的主要内容,如果未能解决你的问题,请参考以下文章
Rebind and Rewind in Execution Plans