Rust 混淆变量的生存期

Rust 混淆变量的生存期,rust,Rust,我正在读一个文件: 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 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() });
这个很好用。但是如果我尝试内联创建

let line = a_line.unwrap().as_slice().trim();
我得到一个奇怪的错误:

error: borrowed value does not live long enough
内联这些调用有什么特别之处?

一行。unwrap()
是一个
字符串。它拥有自己的内容

.as_slice()
(反过来
.trim()
)引用该数据;它要求该基本值继续存在,以便它可以引用某些内容

这就是本例中发生的情况:您没有将
字符串
存储在变量中,因此它仅适用于表达式,因此引用该
字符串(或其内容)的
&str
不能超过表达式


这样,在For Bug之后,C或C++中使用了什么(因为<代码>字符串在<代码结束时释放了,让行=……,/代码>行),或者可能被写为内存泄漏,如果您省略了<代码>字符串< /代码>,C++中的< /p>字符串不能在循环的范围内生存吗?我假设<代码>让行= AyLine。unReAPP().asSLIGESSE().Times()代码>表格;我不知道C++的范围规则是什么,但我认为它们类似于RIST。在这一点上我肯定是错的,就像C和Java一样。这是在一个循环中,因此变量应该一直存在到循环结束。但是您没有在任何地方分配它(

a_line.unwrap()
),是吗?将其分配给
,然后重新分配行的值。