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的主要内容,如果未能解决你的问题,请参考以下文章

markdown ahk rebind默认

Rebind and Rewind in Execution Plans

使用 rebind_alloc 是一个错误吗?

Rust学习-阶段1学习总结

Ninject Rebind 在运行时,可以用作功能切换吗?

浅析DNS Rebinding