rust - Rust 中的 Arc 中的临时生命周期
问题描述
我正在努力理解 Rust 中的临时生命周期概念。
假设我在该Arc
字段中有以下结构:
struct MyStruct {
arc_field: Arc<Mutex<i32>>,
}
当我尝试从它的克隆访问内部 i32 字段时,arc_field
它抱怨
这里的临时价值下降了,但仍然是借来的
这是我尝试检索它的方式:
let my_field = my_struct.arc_field.clone().lock().unwrap();
为什么我需要使用 let 绑定来增加它的生命周期?
这里是游乐场
解决方案
clone
返回一个不存储在变量中的新实例。所以它是一个临时值。您必须将副本存储在变量中以使其成为非临时变量:
let my_field = my_struct.arc_field.clone(); // You have a non temporary lifetime
let my_field = my_field.lock().unwrap();
您不能直接使用克隆值,因为lock
借用它,并且借用不能超过该值。
推荐阅读
- javascript - 如何在 Angular 5 中添加图像?
- .net - 使用 Xamarin Forms 和 MVVM 在 Entry 控件中键入字符时,在短暂延迟后请求数据
- microsoft-teams - 如何本地化我的 Microsoft Teams 机器人欢迎消息?
- javascript - 将 XML 解析为表格适用于除 IE 之外的所有浏览器
- java - 使用 GoogleAuthProvider 重新对用户进行身份验证不起作用
- swiftui - 更改为 @EnvironmentObject 中的 @Published var 不会立即反映
- javascript - 从对象数组中获取特定值 [{"key":"value"}, {"key":"value"}]
- javascript - 为什么我的砖石代码行不起作用?
- html - 如何使用node.js将数据从html发送到three.js?
- google-sheets - 在电子表格中创建评论时,Google Drive API 会忽略锚参数