0

私はレールとルビーに慣れていません... 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 に答える