파일을 열고 일부 문자를 바꿔서 일부 나누기를하고 싶습니다. 그런 다음 문자열 목록을 반환하고 싶습니다. 그러나 나는 error: broken does not live long enough
을 얻는다. 내 코드는 메인에있을 때 작동하므로 수명에만 문제가됩니다.수명이 오래 오래 녹지 않았습니다.
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;
}
어떻게이 함수가 반환 한 값을 호출자의 범위에 포함시킬 수 있습니까?
String으로 변환하면 수명이 증가하는 이유는 무엇입니까? 그들은 컨테이너 소유입니까? – ragingSloth
꽤 많이 있습니다. 'Vec'과'String'은 컨테이너를 소유하고 있습니다. 주변 사람들 중 하나를 지나칠 때 실제로 가치를 유지하기 위해 할당 된 메모리의 소유권을 이전합니다. '& str'은 단순히 빌려준 * reference입니다; 그것은 빌린 물건만큼 오래 살 수 있습니다. –