首页 > 解决方案 > 在 Rust '21 中捕获闭包

问题描述

我刚刚发现以下代码在 Rust 21 中编译(以前在 18 中不编译)

fn get_func (i: &mut i32) -> impl Fn() -> i32 + '_ {
    || *i
} 

是否有隐含牵连i?如果是这样,那么为什么下面的代码也会编译?

fn get_func (i: &mut i32) -> impl Fn() -> i32 + '_ {
    let f = || *i;
    
    println!("{:?}", i);  // was expecting here to give borrow of moved variable error, `&mut` doesnt implement `Copy` trait
    
    f
}

或者它是否隐式移动(在这种情况下是复制)指向的值?但是下面的代码应该可以编译,但它没有——表明它正在移动引用。

fn get_func (i: &mut i32) -> impl Fn() -> i32 {
    || *i
}

标签: rustreferenceclosuresmove

解决方案


推荐阅读