• 变量和字符串的拼接

    > ['我爱你', user.name].join
    > ['我爱你', user.name] * ''
    > '我爱你' << user.name
    > '我爱你'.concat(user.name)
    > format('我爱你%s', user.name)
    > '我爱你%s' % user.name
    .......
    

    还有其他的一些方法,当然执行效率是有差别的,也有些是rubocop不建议使用的,这里就不啰嗦了

    其中,array#*(arg) 这个要复杂些,可以看下源码及DOC(http://ruby-doc.org/core-2.4.0/Array.html#method-i-2A)

  • 默默地看你们搞事,我还是继续撸我的Ruby、Rack、Lua、DPDK,...

    Bye, Rails!

  • #40楼 @trenttian 看贴子里面你们都没有提Rails,而是只提了Ruby,现在你们公司应该没有用Rails来写API了吧,我猜你们是自己用Rack定制的一套Ruby API简易框架,我们这边也在这么干。 ^_^

  • #40楼 @trenttian 哈哈。。Robin还是一如既往的腼腆。

  • @trenttian 瞟了一眼,好像照片上木有佘伟大大了,是不在超有爱了么?

  • 邮件配置信息设置 at 2016年6月08日

    目前正在用dotenv来管理env https://github.com/bkeepers/dotenv

  • ActiveRecord::Relation.pluck(:name, :model, :date).group_by(&:shift).transform_values { |x|
      x.group_by(&:shift).transform_values(&:flatten)
    }
    => {"人名1"=>{"机种1"=>["日期1", "日期2", "日期3"], "机种2"=>["日期4"]}, "人名2"=>{"机种2"=>["日期5"]}}
    
  • Usage
    
    require 'thread_safe'
    
    sa = ThreadSafe::Array.new # supports standard Array.new forms
    sh = ThreadSafe::Hash.new # supports standard Hash.new forms
    cache = ThreadSafe::Cache.new
    

    Rails 4.0+ 默认是引入了 'thread_safe' 这个gem的。

    https://github.com/ruby-concurrency/thread_safe

  • 代码

    string = "Ruby China is a community of Ruby developers."
    # 加长string长度, 增加游戏难度
    string_1000 = string * 1000
    # 随机生成100个不定长串
    keywords = 100.times.collect { SecureRandom.hex(rand(5) + 1) }
    # 预先拼接好正则式
    reg = Regexp.union(keywords)
    # 匹配整词
    reg_fullword = Regexp.new("\\b#{Regexp.escape(keywords.join('|'))}\\b")
    
    n = 1_000
    
    Benchmark.bm do |x|
      puts 'string'
      # 使用select
      x.report { n.times { keywords.select { |keyword| string.include?(keyword) } } }
      # 使用index
      x.report { n.times { string.index(reg).nil? } }
      # 使用index匹配整词
      x.report { n.times { string.index(reg_fullword).nil? } }
      # 使用any
      x.report { n.times { keywords.any? { |k| string.include?(k) } } }
    
      puts
    
      puts 'string_1000'
      x.report { n.times { keywords.select { |keyword| string_1000.include?(keyword) } } }
      x.report { n.times { string_1000.index(reg).nil? } }
      x.report { n.times { string_1000.index(reg_fullword).nil? } }
      x.report { n.times { keywords.any? { |k| string_1000.include?(k) } } }
    end
    

    结果

           user     system      total        real
    string
       0.030000   0.000000   0.030000 (  0.027699)
       0.000000   0.000000   0.000000 (  0.001021)
       0.000000   0.000000   0.000000 (  0.000865)
       0.020000   0.000000   0.020000 (  0.025702)
    
    string_1000
       2.170000   0.010000   2.180000 (  2.175521)
       0.000000   0.000000   0.000000 (  0.001211)
       0.020000   0.000000   0.020000 (  0.012870)
       2.130000   0.000000   2.130000 (  2.136878)
    
  • #3楼 @hiveer 赞。 其实用两个参数,只是为了在不传参数的时候抛出异常,用数组参数,是可以不传参数的哟。

RoRer@ChengDu