P.FUD.01 传递到闭包的变量建议单独重新绑定

【描述】

默认情况下,闭包通过借用来捕获环境变量。或者,可以使用 move 关键字来移动环境变量到闭包中。

将这些要在闭包内用的变量,重新进行分组绑定,可读性更好。

【反例】


#![allow(unused)]
fn main() {
use std::rc::Rc;

let num1 = Rc::new(1);
let num2 = Rc::new(2);
let num3 = Rc::new(3);
let closure = {
    // `num1` 所有权已经转移
    let num2 = num2.clone();  
    let num3 = num3.as_ref(); 
    move || {
        *num1 + *num2 + *num3; // 不符合
    }
};
}

【正例】


#![allow(unused)]
fn main() {
use std::rc::Rc;

let num1 = Rc::new(1);
let num2 = Rc::new(2);
let num3 = Rc::new(3);
// 符合: 单独对要传递到闭包的变量重新绑定
let num2_cloned = num2.clone();
let num3_borrowed = num3.as_ref();
let closure = move || {
    *num1 + *num2_cloned + *num3_borrowed; // 符合
};
}