返回一個新的字符串,我只花了一個星期的閱讀書鏽,現在我正在我的第一個程序,它返回的文件路徑,以系統壁紙:適當的方式在拉斯特
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
@bluejekyll我已經澄清了我的問題,以展示一種看似可以通過簡單地提供一個虛擬參數來獲得終身功能的方法。 – eiko