0

我是 Rails 和 ruby​​ 的新手......我如何重构这样的代码,从 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

但它是否相等,我还能做些什么来让代码更小?

4

3 回答 3

1

这个怎么样?

row[qnt].present? ? eqnt = /(\d+)/.match(row[qnt])[0].to_s : eqnt = 0
于 2013-01-21T19:39:29.200 回答
0
eqnt = (/(\d+)/.match(row[qnt]) || [0])[0]
于 2013-01-21T20:00:52.090 回答
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最终得到不同的类型感到兴奋。

于 2013-01-21T19:47:10.363 回答