我正在寻找一种在Ruby中连接字符串的更优雅的方法。
我有下面这行代码:
source = "#{ROOT_DIR}/" << project << "/App.config"
有没有更好的方法呢?
就这一点而言,<<
和+
的区别是什么
发布于 2008-12-18 15:50:08
+
运算符是正常的连接选择,并且可能是连接字符串的最快方法。
+
和<<
之间的不同之处在于,<<
会更改其左侧的对象,而+
不会。
irb(main):001:0> s = 'a'
=> "a"
irb(main):002:0> s + 'b'
=> "ab"
irb(main):003:0> s
=> "a"
irb(main):004:0> s << 'b'
=> "ab"
irb(main):005:0> s
=> "ab"
发布于 2008-12-18 13:22:32
如果只是连接路径,可以使用Ruby自己的File.join方法。
source = File.join(ROOT_DIR, project, 'App.config')
发布于 2015-02-20 07:22:23
来自http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/
使用<<
又称concat
要比+=
高效得多,因为后者创建了一个时态对象,并用新对象覆盖了第一个对象。
require 'benchmark'
N = 1000
BASIC_LENGTH = 10
5.times do |factor|
length = BASIC_LENGTH * (10 ** factor)
puts "_" * 60 + "\nLENGTH: #{length}"
Benchmark.bm(10, '+= VS <<') do |x|
concat_report = x.report("+=") do
str1 = ""
str2 = "s" * length
N.times { str1 += str2 }
end
modify_report = x.report("<<") do
str1 = "s"
str2 = "s" * length
N.times { str1 << str2 }
end
[concat_report / modify_report]
end
end
输出:
____________________________________________________________
LENGTH: 10
user system total real
+= 0.000000 0.000000 0.000000 ( 0.004671)
<< 0.000000 0.000000 0.000000 ( 0.000176)
+= VS << NaN NaN NaN ( 26.508796)
____________________________________________________________
LENGTH: 100
user system total real
+= 0.020000 0.000000 0.020000 ( 0.022995)
<< 0.000000 0.000000 0.000000 ( 0.000226)
+= VS << Inf NaN NaN (101.845829)
____________________________________________________________
LENGTH: 1000
user system total real
+= 0.270000 0.120000 0.390000 ( 0.390888)
<< 0.000000 0.000000 0.000000 ( 0.001730)
+= VS << Inf Inf NaN (225.920077)
____________________________________________________________
LENGTH: 10000
user system total real
+= 3.660000 1.570000 5.230000 ( 5.233861)
<< 0.000000 0.010000 0.010000 ( 0.015099)
+= VS << Inf 157.000000 NaN (346.629692)
____________________________________________________________
LENGTH: 100000
user system total real
+= 31.270000 16.990000 48.260000 ( 48.328511)
<< 0.050000 0.050000 0.100000 ( 0.105993)
+= VS << 625.400000 339.800000 NaN (455.961373)
https://stackoverflow.com/questions/377768
复制相似问题