我只想要一个从std::env::args()中获得的String个参数变量的空格,我一直在用fold函数创建它,如下所示:

std::env::args()
    .fold("".to_string(), |accum, s| accum + &s + " ")

然而,这在末端创造了一个多余的空间,这是不需要的.我try 使用truncate函数,但truncate不返回String,只是修改了现有的String,这还需要创建一个中间绑定,以便使用Stringlen()调用来定义被截断的String应该有多长(我相信这本身需要一个中间绑定,因为Rust当前的词汇borrow 规则!)

推荐答案

在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'formatformat_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.

Rust相关问答推荐

如何在不安全的代码中初始化枚举 struct

什么样的 struct 可以避免使用RefCell?

rust 迹-内存管理-POP所有权-链表

制作一片连续整数的惯用Rust 方法?

新创建的变量的绑定生存期

类型批注需要静态生存期

无符号整数的Rust带符号差

将Vec<;U8&>转换为Vec<;{Float}&>

有没有一种方法可以创建一个闭包来计算Rust中具有随机系数的n次多项式?

为什么实现特征的对象期望比具体对象有更长的生命周期?

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

Rust 如何返回大类型(优化前)?

Rust中如何实现一个与Sized相反的负特性(Unsized)

返回迭代器的特征

rust 中不同类型的工厂函数

如何在 Rust 中将 UTF-8 十六进制值转换为 char?

为什么在 rust 中删除 vec 之前应该删除元素

没有分号的返回表达式的性能是否比使用返回更好?在Rust ?

意外的正则表达式模式匹配

Rust 跨同一文件夹中文件的可见性