Ruby csv import使代码更小但相等

时间:2013-01-21 19:24:38

标签: ruby-on-rails ruby fastercsv

我是铁杆和红宝石的新手...... 我如何重构这样的代码,从csv文件数据导入? 现在我有这样的代码

  if row[qnt].to_s != ""
    eqnt = /(\d+)/.match(row[qnt])[0].to_s
  else
    eqnt = 0
  end

我尝试像

这样的东西
if row[qnt].present?
        eqnt = /(\d+)/.match(row[qnt])[0].to_s
      else
        eqnt = 0
      end

但它是否相同,还有什么我可以做的才能让代码更小?

3 个答案:

答案 0 :(得分:1)

这个怎么样?

row[qnt].present? ? eqnt = /(\d+)/.match(row[qnt])[0].to_s : eqnt = 0

答案 1 :(得分:0)

我不相信代码会通过尝试进一步压缩它来获得可读性。

eqnt = row[qnt].present? ? /(\d+)/.match(row[qnt])[0].to_s : 0

或者

eqnt = 0
eqnt = /(\d+)/.match(row[qnt])[0].to_s if row[qnt].present?

或者

theRow = row[qnt]
eqnt = theRow.present? ? /(\d+)/.match(theRow).first.to_s : 0

或者更好的是,将其提取到方法中,保持主线代码清洁,并隔离逻辑。

我对eqnt以不同类型结尾感到很兴奋,除非这是设计上的。

答案 2 :(得分:0)

eqnt = (/(\d+)/.match(row[qnt]) || [0])[0]