如何将值从一个列表移动/克隆到另一个列表?

时间:2015-08-07 07:58:31

标签: rust

我只想尝试这样的事情:

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中做到这一点?

谢谢!

1 个答案:

答案 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));
}