我最近读了一篇不错的 post关于在 Ruby 中使用 StringIO
。不过,作者没有提到的是 StringIO
只是一个“I”。没有“哦”。你不能这样做,例如:
s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`
Ruby 确实需要一个 StringBuffer,就像 Java 那样。 StringBuffers 有两个重要的用途。首先,它们让您测试 Ruby 的 StringIO 所做的一半输出。其次,它们对于从小部分构建长字符串很有用——Joel 一遍又一遍地提醒我们,否则会非常非常慢。
有好的替代品吗?
的确,Ruby 中的字符串是可变的,但这并不意味着我们应该始终依赖该功能。例如,如果 stuff
很大,那么它的性能和内存要求就非常糟糕。
result = stuff.map(&:to_s).join(' ')
在 Java 中执行此操作的“正确”方法是:
result = StringBuffer.new("")
for(String s : stuff) {
result.append(s);
}
虽然我的 Java 有点生疏。
最佳答案
我查看了 StringIO
的 ruby 文档,看起来您想要的是 StringIO#string
,不是 StringIO#to_s
因此,将您的代码更改为:
s = StringIO.new
s << 'foo'
s << 'bar'
s.string
关于ruby - 为什么 Ruby 没有真正的 StringBuffer 或 StringIO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323/