我只想要从String
获得的参数变量的空格分隔std::env::args()
,我一直使用fold
函数创建这样的:
std::env::args()
.fold("".to_string(), |accum, s| accum + &s + " ")
然而,这在末端创造了额外的空间,这是不希望的。我尝试使用truncate
函数,但truncate
不返回String
,只修改现有的String
,这也需要创建一个中间绑定,以便使用String
的len()
调用来定义截断的String
应该多长时间(由于Rust目前的词汇借用规则,我自己需要中间约束!)
在Rust中打印所有命令行参数的惯用方法是什么?
fn main() {
let mut args = std::env::args();
if let Some(arg) = args.next() {
print!("{}", arg);
for arg in args {
print!(" {}", arg);
}
}
}
或者更好的Itertools'format
:
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,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());
}
请注意,这不像其他选择那样有效,因为每次迭代都会克隆String
。
这是一个替代方案
我只想要从
String
获得的参数变量的空格分隔std::env::args()
fn args_string() -> String {
let mut out = String::new();
let mut sep = "";
for arg in std::env::args() {
out.push_str(sep);
out.push_str(&*arg);
sep = " ";
}
out
}
pub fn main() {
println!("{}", args_string());
}