注意:我对Rust还是个新手
我创建了一个函数来获取当前exe的文件名(而不是完整路径)。
fn exe_name() -> Result<Option<&'static OsStr>, Box<dyn Error>> {
Ok(env::current_exe()?.file_name())
}
但代码无法编译:
$ cargo clippy
...
error[E0515]: cannot return value referencing temporary value
--> src/libs.rs:8:5
|
8 | Ok(env::current_exe()?.file_name())
| ^^^-------------------^^^^^^^^^^^^^
| | |
| | temporary value created here
| returns a value referencing data owned by the current function
For more information about this error, try `rustc --explain E0515`.
...
我已经检查了rustc --explain E0515
并在互联网上搜索(以及StackOverflow),所以基本上我不能返回对本地var的引用,因为它会在函数结束时被销毁。尽管如此,我还是不知道我的代码中有问题的部分在哪里.你能解释一下吗?
我试过这个代码,但仍然不起作用:
Ok(env::current_exe()?.to_owned().file_name())
Ok(env::current_exe()?.clone().file_name())
1条答案
按热度按时间fnvucqvd1#
这个错误是因为current_exe返回PathBuf,它是一个owned value。
当在
PathBuf
上调用file_name时,它会引用存储在PathBuf
中的一段路径。因此,当函数返回时,引用不再引用任何东西所拥有的数据。它相当于
你已经注意到,你的函数的返回值需要某种生命周期,你设置为
static,这意味着程序的整个长度,这是不正确的。 那么从
file_name返回的生命周期实际上是指?在本例中,生存期是由
exe_name函数返回的,因此无法返回。 要使函数正常工作,需要将
file_name的结果设置为拥有值,而不是
current_exe`。