1
我想打開一個文件,替換一些字符,並進行一些拆分。然後我想返回字符串列表。但我得到error: broken does not live long enough
。我的代碼在main中運行,所以它只是生命週期中的一個問題。終身不夠久生鏽
fn tokenize<'r>(fp: &'r str) -> Vec<&'r str> {
let data = match File::open(&Path::new(fp)).read_to_string(){
Ok(n) => n,
Err(e) => fail!("couldn't read file: {}", e.desc)
};
let broken = data.replace("'", " ' ").replace("\"", " \" ").replace(" ", " ");
let mut tokens = vec![];
for t in broken.as_slice().split_str(" ").filter(|&x| *x != "\n"){
tokens.push(t)
}
return tokens;
}
我怎樣才能讓這個函數返回的值生存在調用者的範圍內?
爲什麼轉換爲字符串會增加它們的壽命?他們是否屬於集裝箱? – ragingSloth 2014-11-21 22:27:44
非常。 'Vec'和'String'是擁有容器。當你傳遞其中的一個時,實際上是轉移已分配內存的所有權來保存其值。 '&str'只是一個*借來的*參考;它只能活到它借來的東西。 – 2014-11-22 00:42:31