这是一个完整的Rust新手问题,所以我非常感谢有耐心向我解释这个问题的人。我有以下代码:
fn main() {
let api_key = match read_api_key(Path::new("../stockfighter-api.key")) {
Ok(key) => key,
Err(_) => panic!("Unable to read key!"),
};
println!("API Key: {}", api_key);
}
fn read_api_key(path: &Path) -> Result<String, io::Error> {
let mut f = File::open(path)?;
let mut buffer = String::new();
f.read_to_string(&mut buffer)?;
Ok(buffer.trim().to_string())
}
但是在我的函数中对.to_string()
的最后调用对我来说似乎是多余的:为什么在该函数中分配第二个String
,当那里已经有一个我只需要一部分?但是,如果我尝试重写这样的函数:
fn read_api_key(path: &Path) -> Result<&str, io::Error> {
let mut f = File::open(path)?;
let mut buffer = String::new();
f.read_to_string(&mut buffer)?;
Ok(buffer.trim())
}
我最终得到以下错误:
src/main.rs:31:8: 31:14 error: `buffer` does not live long enough
src/main.rs:31 Ok(buffer.trim())
^~~~~~
错误对我有意义,但我不知道如何以任何其他方式避免第二次String
分配......
有人能告诉我我在这里失踪或误解吗?