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