【发布时间】:2016-04-29 15:09:48
【问题描述】:
我只想要从std::env::args() 获得的参数变量的空格分隔String,我一直在使用fold 函数创建,如下所示:
std::env::args()
.fold("".to_string(), |accum, s| accum + &s + " ")
但是,这会在末尾创建一个多余的空间,这是不需要的。我尝试使用truncate 函数,但truncate 不返回String,只是修改了现有的String,而且这需要创建中间绑定才能使用String' s len() 调用来定义截断的 String 应该多长时间(我相信,由于 Rust 当前的词法借用规则,这本身需要一个中间绑定!)
【问题讨论】:
-
@Ferruccio 这只会产生一个前导空格,我只是按照我的方式进行操作,因为尾随空格通常是不可见的,而在格式中可以看到前导空格。我应该指定前导和尾随空格是不需要的。
-
如果您愿意添加依赖项,
intersperse中有一个intersperse方法。我认为std没有直接的方法。 -
是的,当然,我应该意识到会发生这种情况。我之前遇到过这个问题(使用C#)。您需要检查
accum是否为空。我不确定这是否是有效的 Rust 语法,但我通常会这样做:accum + (if accum == "" {""} else {" "}) + &s -
@Ferruccio 是的,这会起作用,看起来有点混乱,但没有什么太可怕的。不过,对于任何选择
itertools方法的人来说,请注意 - 在itertools中有一个join函数,它将所有元素连接到一个由指定分隔符分隔的String。 -
为什么所有这些都散布在 itertools 中(我经常看到)? Itertools 有实际的格式化方法,使用
.join(" ")or.format_default(" ")
标签: rust