【发布时间】:2015-07-11 12:36:06
【问题描述】:
在 Ruby 1.8.7 上,当我发现 << 和 += 在 String 对象上似乎存在巨大差异时,我正在执行一个连接字符串的循环:
y = ""
start = Time.now
99999.times { |x| y += "some new string" }
puts "Time: #{Time.now - start}"
# Time: 31.56718
y=''
start = Time.now
99999.times { |x| y << "some new string" }
puts "Time: #{Time.now - start}"
# Time: 0.018256
我google了一下,找到了一些结果:
http://www.rubylove.info/post/1038516765/difference-between-string-concatenation-ruby-rails
表示<< 修改了两个字符串,而+= 只修改了调用者。我不明白为什么然后<< 更快。
接下来我去了Ruby doc,但我想知道为什么没有方法+=
【问题讨论】:
-
Related: stackoverflow.com/questions/4684446/… (实际上,这甚至可能是重复的?)
-
您链接到的文章说
<<修改了两个字符串是不正确的。original和copy变量引用同一个字符串对象。 -
@Adrian 正确。那篇文章的作者似乎误解了该代码发生了什么。事实上,“副本”根本不是真正的副本,只是对同一个 String 对象的引用。