我最近读了一篇关于在Ruby中使用StringIO的不错的post篇文章.然而,作者没有提到的是,StringIO只是一个"I".没有"O".你可以这样做,例如:

s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`

Ruby真的需要一个与Java一样的StringBuffer.StringBuffers有两个重要用途.首先,它们让你测试Ruby的StringIO的一半输出.其次,它们有助于从小部分构建长弦——乔尔反复提醒我们的是,否则速度会非常慢.

有好的替代品吗?

Ruby中的字符串确实是可变的,但这并不意味着我们应该始终依赖于该功能.例如,如果stuff很大,那么它的性能和内存需求就非常糟糕.

result = stuff.map(&:to_s).join(' ')

在Java中实现这一点的"正确"方法是:

result = StringBuffer.new("")
for(String s : stuff) {
  result.append(s);
}

虽然我的Java有点Rust .

推荐答案

我查看了StringIO的ruby文档,看起来你想要的是StringIO#string,而不是StringIO#to_s

因此,将代码更改为:

s = StringIO.new
s << 'foo'
s << 'bar'
s.string

Ruby相关问答推荐

当bsearch将数组中的第一个元素与2个值匹配时,它返回nil.为什么?

Rbenv说未安装已安装的版本

用函数组合枚举器的Ruby方法

是否可以在 Ruby 中使用正则表达式匹配字符串\b(退格字符)?

Ruby 的 .() 运算符是如何工作的?

Ruby vs Scala - 各自的优缺点

Windows 上的 Jekyll:Pygments 不工作

`expect`测试中的Rspec`eq`与`eql`

rbenv 没有显示可用的 ruby​​ 版本

将一个目录的内容复制到另一个目录

Ruby - 将块传递给方法

Vim 用 ruby​​ 语法高亮显示很慢

如何从最后一个元素开始遍历数组?

YAML 每个缩进多少个空格?

如何让 Ruby 1.9 成为 Ubuntu 上的默认 Ruby?

为什么显式返回会对 Proc 产生影响?

Ruby NOT Rails 中有复数函数吗?

Array.empty 的相反方法是什么?或 [].empty?在Ruby中

如何使用#{variable}在Ruby中格式化带有浮点数的字符串?

通过多个分隔符拆分字符串