【发布时间】:2017-08-22 02:08:21
【问题描述】:
我刚刚花了一周时间阅读 Rust Book,现在我正在编写我的第一个程序,它将文件路径返回到系统壁纸:
pub fn get_wallpaper() -> &str {
let output = Command::new("gsettings");
// irrelevant code
if let Ok(message) = String::from_utf8(output.stdout) {
return message;
} else {
return "";
}
}
我收到了错误 expected lifetime parameter on &str 并且我知道 Rust 想要一个输入 &str 将作为输出返回,因为我在函数内创建的任何 &str 都会在函数结束后立即清理。
我知道我可以通过返回 String 而不是 &str 来回避这个问题,类似问题的许多答案都说了这么多。但我似乎也可以这样做:
fn main() {
println!("message: {}", hello_string(""));
}
fn hello_string(x: &str) -> &str {
return "hello world";
}
从我的功能中获取&str。有人可以向我解释为什么这很糟糕以及为什么我永远不应该这样做吗?或者在某些情况下可能还不错?
【问题讨论】:
-
我真的不知道如何避免这种情况。您可以尝试通过预先分配缓冲区来降低成本,但必须有人拥有此内存。在从命令的输出中读取字符串之前,您无法知道字符串的长度。在堆上分配对我来说很有意义。
-
@bluejekyll 我已经澄清了我的问题,以展示一种方法,您似乎可以通过提供一个虚拟参数来获得 &str 函数的生命周期。
标签: rust