我想编写一个程序,为系统的nslookup命令行程序设置外壳程序:
error[E0382]: borrow of moved value: `arg`
--> src/main.rs:6:41
|
5 | v.push(arg);
| --- value moved here
6 | newstr.push_str(&format!(" {}", arg));
| ^^^ value borrowed here after move
|
= note: move occurs because `arg` has type `std::string::String`, which does not implement the `Copy` trait
env::args()
如何在不再次遍历ERROR in src/app/providers/dynamic-data/dynamic-data.service.ts(5,26): error TS1149: File name '/Users/gibranshah/repos/eva/EVA/src/app/model/endpoint.ts' differs from already included file name '/Users/gibranshah/repos/eva/EVA/src/app/model/Endpoint.ts' only in casing.
的情况下更正代码?
答案 0 :(得分:2)
颠倒使用arg
的行的顺序:
for arg in std::env::args() {
//newstr.push_str(&format!(" {}", arg));
write!(&mut newstr, " {}", arg);
v.push(arg);
}
Vec::push
通过值来接受参数,这将移动arg
的所有权,因此在v.push(arg)
之后将不再使用它。 format!
和相关的宏隐式借用了它们的参数,因此您可以在其中之一中使用arg
之后再次使用。
如果确实需要将相同的String
移动到两个不同的位置,则需要添加.clone()
,以复制字符串。但这在这种情况下不是必需的。
还请注意,format!
创建了一个新的String
,当您只想添加到现有String
的末尾时,这样做很浪费。如果将use std::fmt::Write;
添加到文件顶部,则可以改用write!
(如上所示),这样更简洁,而且性能可能更高。
答案 1 :(得分:1)
您可以这样做:
fn main() {
let args: Vec<_> = std::env::args().collect();
let s = args.join(" ");
println!("{}", s);
}
首先,创建矢量,然后创建字符串。