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

Arn*_*Roa 8 ruby string

关于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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Aje*_*i32 11

铲斗操作员的操作<<+=处理长弦时要好得多,因为铲斗操作员可以修改原始弦,而+=每次操作时都必须将第一个弦中的所有文本复制到新的弦中.

+=String类上没有定义运算符,因为它+=是一个组合运算符.简而言之x += "asdf"就是完全相同x = x + "asdf",所以你应该+在字符串类上引用运算符,而不是查找+=运算符.