gpt4 book ai didi

ruby - 为什么 Ruby 没有真正的 StringBuffer 或 StringIO?

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:54 24 4
gpt4 key购买 nike

我最近读了一篇不错的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com