如何从Rust函数返回一个新的& str切片?

时间:2016-06-25 19:00:49

标签: rust

这是一个完整的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分配......

有人能告诉我我在这里失踪或误解吗?

0 个答案:

没有答案