我只想尝试这样的事情:
fn main() {
let mut points : Vec<(&str, &str)> = Vec::new();
let existing : Vec<(String, String)> = Vec::new();
for t in existing {
points.push((&t.0[..], &t.1[..]));
}
}
出了错误:
main.rs:6:21: 6:24 error: `t.0` does not live long enough
main.rs:6 points.push((&t.0[..], &t.1[..]));
我怎么能在Rust中做到这一点?
谢谢!
答案 0 :(得分:6)
生命周期从变量声明开始。由于您的points
变量是在existing
变量之前创建的,因此points
不允许对existing
进行任何引用,因为existing
将在points
之前被删除1}}。
第二个问题是你正在迭代值,这将进一步限制字符串到循环体的生命周期。
简单的解决方案是交换两个声明并更改循环以迭代引用而不是值:
let existing : Vec<(String, String)> = Vec::new();
let mut points : Vec<(&str, &str)> = Vec::new();
for t in &existing {
points.push((&t.0, &t.1));
}