IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Rust variable rebinding for closure

    金庆发表于 2021-08-22 09:25:00
    love 0
    # 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.

    金庆 2021-08-22 17:25 发表评论


沪ICP备19023445号-2号
友情链接