rust - 打印选项解包变量后变量给出错误
问题描述
如果我尝试解开一个变量,然后尝试打印该变量,它会给出错误
borrow of moved value: `var`
rustc 的完整输出
error[E0382]: borrow of moved value: `var`
--> test.rs:6:24
|
3 | let var: Option<String> = Some("Hello World".to_string());
| --- move occurs because `var` has type `Option<String>`, which does not implement the `Copy` trait
4 | println!("var: {:?}", var);
5 | println!("value: {}", var.unwrap());
| -------- `var` moved due to this method call
6 | println!("var: {:?}", var);
| ^^^ value borrowed here after move
|
note: this function takes ownership of the receiver `self`, which moves `var`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
我的代码:
fn main() {
// Doesn't work on String type
let var: Option<String> = Some("Hello World".to_string());
println!("var: {:?}", var);
println!("value: {}", var.unwrap());
println!("var: {:?}", var);
// Works on i32 type
// let var: Option<i32> = Some(5);
// println!("var: {:?}", var);
// println!("value: {}", var.unwrap());
// println!("var: {:?}", var);
}
顺便说一句,我刚开始学习 rust,所以我对 rust 了解不多。
解决方案
问题是拥有以下unwrap
所有权self
:
fn unwrap(self) -> T;
为了避免这种情况,你可以as_ref
先打电话,这会给你一个Option<&T>
- 借用:
// fn as_ref(&self) -> Option<&T>;
println!("var: {:?}", var);
println!("value: {}", var.as_ref().unwrap());
println!("var: {:?}", var);
Option
有很多这样的实用方法,例如as_mut
, as_deref
, map
, 和cloned
. 我鼓励您查看文档以获得完整的参考,它们非常方便。
推荐阅读
- ruby-on-rails - Rails 生产删除链接制作获取(显示)请求
- ansible - Ansible 无法重新加载 sysctl
- css - 如何更改来自 ng2-smart-table 中 json 文件的数据的字体大小?
- python - 更改 QMessageBox 和 SaveFileDialog 的光标
- php - 使用波兰语字符将 CSV 导入 SQL 数据库
- swift - Swift Enum 不符合协议 CaseIterable
- android - KSOAP 将属性添加到 xml 标记
- react-router - 决定里面的哪条路线
根据条件渲染 - r - 为混合模型编码 GGplot
- spring - 如何将 CronTrigger 信息存储到存储库中并在应用程序启动时加载 TaskScheduler?