比如
'Ruby' + 'Beginner'
和
'Ruby' << 'Beginner'
是不是 + 是生成新对象而 << 是直接在 'Ruby' 这个对象上加 'Beginner' 然后返回?
+
<<
'Ruby'
哪个效率高?
两个之间相互换用的时候可能出现什么问题?
可以使用 #object_id 方法来看是否是一个对象。
#object_id
与大多数语言不同,Ruby 的字符串是可变对象。<<在原来的对象上操作,+ 返回新对象。效率如何,可以写 benchmark 看看结果。
@yuest 我记得《Learning Ruby》上是像你说的那样。
1.9.3p125 :003 > Benchmark.measure{ 100000.times { c = 'a' + 'b' }} => 0.050000 0.000000 0.050000 ( 0.045099)
1.9.3p125 :004 > Benchmark.measure{ 100000.times { c = 'a' << 'b' }} => 0.040000 0.000000 0.040000 ( 0.038751)
看来确实
1.9.3p125 :005 > a = 'a' => "a" 1.9.3p125 :006 > b = 'b' => "b" 1.9.3p125 :007 > c = 'a' + 'b' => "ab" 1.9.3p125 :008 > c.object_id => 3560360 1.9.3p125 :009 > a => "a" 1.9.3p125 :010 > d = a << b => "ab" 1.9.3p125 :011 > d.object_id => 3579120 1.9.3p125 :012 > a.object_id => 3579120 1.9.3p125 :013 > a => "ab"
大概理解了
学习了
#3 楼 @yuest 从原理上来说, << 应该是会比 + 的性能要好。
看看它的 C 怎么实现就知道啦...
<<: http://ruby-doc.org/core-1.9.3/String.html#method-i-3C-3C +: http://ruby-doc.org/core-1.9.3/String.html#method-i-2B
按一下 "click to toggle source" 就看得到 C 代码了