Rust 如何增加绑定的生存期

Rust 如何增加绑定的生存期,rust,lifetime,Rust,Lifetime,我有以下代码 use std::process::Command; fn main() { let cmds = vec![vec!["ls", "-lh"], vec!["grep", "foo"]]; let mut processes: Vec<&mut Command> = Vec::new(); let mut i = 0; let length = cmds.len(); while i < length {

我有以下代码

use std::process::Command;

fn main() {
    let cmds = vec![vec!["ls", "-lh"], vec!["grep", "foo"]];
    let mut processes: Vec<&mut Command> = Vec::new();

    let mut i = 0;
    let length = cmds.len();
    while i < length {
        let cmd = cmds[i].clone();
        let mut p = Command::new(&cmd[0]).args(&(cmd[1..]));
        processes.push(p);
        i += 1;
    }
    println!("processes: {:?}", processes);

    // want to manipulate processes elements here again.
    // ...
}

我理解它为什么拒绝编译,我只是不知道在这种情况下如何修复它。

您可以存储
命令
对象本身,而不是存储借用的引用

let cmds = vec![vec!["ls", "-lh"], vec!["grep", "foo"]];
let mut processes: Vec<Command> = Vec::new();
// ^ you can store concrete objects instead of references.

for cmd in &cmds {
// ^ prefer a `for` loop over a `while` loop. (Also, you don't need to clone the cmds)
    let mut p = Command::new(cmd[0]);
    p.args(&cmd[1..]);
    // ^ you can get a concrete `Command` instead of `&mut Command` reference
    //   if you store the returned object from `new()`.
    processes.push(p);
}

println!("processes: {:?}", processes);
// processes: ["ls" "-lh", "grep" "foo"]
让cmds=vec![vec![“ls”、“-lh”]、vec![“grep”、“foo”];
让mut进程:Vec=Vec::new();
//^您可以存储具体对象而不是引用。
用于cmd中的cmd(&cmds){
//^首选“for”循环而不是“while”循环。(此外,您不需要克隆cmds)
让mut p=Command::new(cmd[0]);
p、 args(&cmd[1..]);
//^您可以获得一个具体的“Command”,而不是“&mut Command”引用
//如果存储“new()”返回的对象。
进程。推(p);
}
普林顿!(“进程:{:?}”,进程);
//进程:[“ls”“-lh”、“grep”“foo”]

谢谢!学到了很多:)不可能是,句号。标记的问题回答了这个(重复的)问题不太匹配(解决方案部分至少对我的问题不清楚),但确实以某种方式回答了我的问题。谢谢你的链接!