【发布时间】:2017-11-20 16:53:12
【问题描述】:
我有一个以常量形式定义的数组,在任何函数之外:
const VALUES: [(char, &str); 2] = [('A', "abc"), ('B', "acb")];
我正在尝试使用位于Iterator 上的find() 方法,以便根据谓词从数组中提取单个元素:
VALUES.iter().find(|&&(name, _)| name == 'A');
在这种形式下,它可以正常工作。但是,一旦我尝试创建let 绑定并尝试绑定结果,我就无法将找到的元素评估为任何东西,根据文档,结果应该以Option<T> 的形式返回。
让我们把第二行改成行不通的:
const VALUES: [(char, &str); 2] = [('A', "abc"), ('B', "acb")];
fn main() {
let result = VALUES.iter().find(|&&(name, _)| name == 'A');
}
人们希望这会根据文档返回 Option<T>,但我却得到了一个编译错误:
error: borrowed value does not live long enough
--> src/main.rs:4:63
|
4 | let result = VALUES.iter().find(|&&(name, _)| name == 'A');
| ------ temporary value created here ^ temporary value dropped here while still borrowed
5 | }
| - temporary value needs to live until here
|
= note: consider using a `let` binding to increase its lifetime
我完全糊涂了;我确定我刚刚搞砸了“借用检查器”。也许有人可以指出我正确的方向?
【问题讨论】: