在Rust中使用print个命令行参数的惯用方法是什么?
fn main() {
let mut args = std::env::args();
if let Some(arg) = args.next() {
print!("{}", arg);
for arg in args {
print!(" {}", arg);
}
}
}
或者更好地搭配Itertools'format
或format_with
:
use itertools::Itertools; // 0.8.0
fn main() {
println!("{}", std::env::args().format(" "));
}
我只想要一个间隔String
的空间
fn args() -> String {
let mut result = String::new();
let mut args = std::env::args();
if let Some(arg) = args.next() {
result.push_str(&arg);
for arg in args {
result.push(' ');
result.push_str(&arg);
}
}
result
}
fn main() {
println!("{}", args());
}
或
fn args() -> String {
let mut result = std::env::args().fold(String::new(), |s, arg| s + &arg + " ");
result.pop();
result
}
fn main() {
println!("{}", args());
}
如果使用Itertools,可以将上面的format
/format_with
示例与format!
宏一起使用.
join
也很有用:
use itertools::Itertools; // 0.8.0
fn args() -> String {
std::env::args().join(" ")
}
fn main() {
println!("{}", args());
}
在其他情况下,您可能希望使用intersperse
:
use itertools::Itertools; // 0.8.0
fn args() -> String {
std::env::args().intersperse(" ".to_string()).collect()
}
fn main() {
println!("{}", args());
}
请注意,这并不像其他 Select 那样有效,因为每次迭代都会克隆一个String
.