【发布时间】:2022-01-07 13:51:58
【问题描述】:
在尝试打印我的主目录时遇到以下错误:
fn main() {
let home = home::home_dir().unwrap().to_str().unwrap();
println!("home dir: {}", home);
}
error[E0716]: temporary value dropped while borrowed
--> src/main.rs:3:16
|
3 | let home = home::home_dir().unwrap().to_str().unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
| |
| creates a temporary which is freed while still in use
4 | println!("home dir: {}", home);
| ---- borrow later used here
|
= note: consider using a `let` binding to create a longer lived value
但是如果我拆分错误消息中带下划线的部分并将其放入单独的变量中,它会起作用:
fn main() {
let home_buf = home::home_dir().unwrap();
let home_str = home_buf.to_str().unwrap();
println!("home dir: {}", home_str);
}
我的问题是这两个例子有什么区别?
(我在我的代码中使用home crate)
【问题讨论】:
-
编译器报错信息的哪一部分不清楚?
-
附带问题:
home在原始示例中显然意味着两个不同的事物这一事实是否也会引起问题?看起来既是板条箱名称又是变量名称。 -
这是个好问题。我认为变量名会影响 crate,但我尝试在下一行使用
home::home_dir()并且效果很好。 -
@KevinAnderson 没问题,Rust 能够消除两者之间的歧义。
标签: rust