rust - 在 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
}
解决方案
推荐阅读
- flutter - 使用 Paypal 和 Stripe 的市场
- .net - 在 Windows 登录之前将 UWP 应用程序作为系统启动
- python - 正则表达式匹配似乎卡住或永远需要
- typescript - 是否可以从文件中隐藏所有 TypeScript 以仅查看 JS 逻辑?
- swift - 在 Swift 中将字符串附加到文本文件的最佳方法
- python - 如何使用硒在框架中插入数据
- javascript - 如何从 node.js 上的另一个 js 文件导入对象数组?
- python - 缺少对键列表的检查:值元素
- visual-studio - nuget 包部署与 VisualStudio 发布与 msbuild 发布
- reactjs - Ant design select - 搜索和过滤除值以外的选项,例如标题或键