我正在读一个文件:
let mut file = BufferedReader::new(File::open(path));
let mut first: bool = true;
for a_line in file.lines() {
let mut line = a_line.unwrap();
let line = line.as_slice().trim();
if first && line != "[shogun]" {
//let line = a_line.unwrap().as_slice().trim();
//if first && line.trim() != "[shogun]" {
return None;
}
first = false;
}
return Some(Settings { log: String::new() });
这很好用。但是,如果我尝试内联line
:
let line = a_line.unwrap().as_slice().trim();
我得到一个奇怪的错误:
error: borrowed value does not live long enough
内联这些电话有什么特别之处?
答案 0 :(得分:1)
a_line.unwrap()
是String
。它拥有它的内容。
.as_slice()
(然后依次为.trim()
)然后引用该数据;它要求该基值继续存在,以便可以引用它。
这就是在这种情况下发生的事情:你没有将String
存储在一个变量中,因此它只适用于表达式,因此&str
是对{的引用String
{1}}(或其内容)不能比表达式更长。
因此,在C或C ++中会出现一个免费使用后的错误(因为String
在let line = …;
行的末尾被释放),或者可能被写为内存泄漏,如果您省略了String
的释放,则会出现编译错误。