首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby中的字符串连接

Ruby中的字符串连接
EN

Stack Overflow用户
提问于 2008-12-18 13:04:21
回答 14查看 586.2K关注 0票数 390

我正在寻找一种在Ruby中连接字符串的更优雅的方法。

我有下面这行代码:

代码语言:javascript
复制
source = "#{ROOT_DIR}/" << project << "/App.config"

有没有更好的方法呢?

就这一点而言,<<+的区别是什么

EN

回答 14

Stack Overflow用户

发布于 2008-12-18 15:50:08

+运算符是正常的连接选择,并且可能是连接字符串的最快方法。

+<<之间的不同之处在于,<<会更改其左侧的对象,而+不会。

代码语言:javascript
复制
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"
票数 104
EN

Stack Overflow用户

发布于 2008-12-18 13:22:32

如果只是连接路径,可以使用Ruby自己的File.join方法。

代码语言:javascript
复制
source = File.join(ROOT_DIR, project, 'App.config')
票数 80
EN

Stack Overflow用户

发布于 2015-02-20 07:22:23

来自http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/

使用<<又称concat要比+=高效得多,因为后者创建了一个时态对象,并用新对象覆盖了第一个对象。

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
____________________________________________________________
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)
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/377768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档