+ =和<<之间的Ruby差异以连接字符串

在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 

我谷歌了解一下,发现了一些结果:

http://www.rubylove.info/post/1038516765/difference-between-string-concatenation-ruby-rails

<<修改两个字符串,而+=只修改调用者。 我不明白为什么然后<<更快。

接下来我去了Ruby doc,但我想知道为什么没有方法+=

http://ruby-doc.org/core-2.2.0/String.html

铲斗操作符<<在处理长字符串时执行比+=好得多,因为允许铲操作符修改原始字符串,而+=必须在每次运行时将第一个字符串中的所有文本复制到新字符串中。

String类上没有定义+=运算符,因为+=是组合运算符。 简而言之, x += "asdf"完全等同于x = x + "asdf" ,因此您应该在字符串类上引用+运算符,而不是查找+=运算符。