2

これは私が見つけた最も近いものですが、数値ではなくブール値を扱っています: DRY up Ruby terary

コードを短く読みやすく保ちながら、Ruby での 0 による除算のシナリオを回避しようとしています。

次のコードをより簡潔にしたいと思います。

number_to_percentage ((percent_complete.nan? ? 0 : (percent_complete * 100)), :precision => 0)

また

number_to_percentage ((percent_complete.nan? ? 0 : percent_complete) * 100, :precision => 0)

今読むのは本当に難しいようです。より多くのチェーンが含まれているため、percent_complete実際にはかなり長くなります。この値もメソッドから返すので、また長くなります。

一時変数の使用やメソッド名の短縮は避けたいので、別の方法を学びたいと思っていました。

「percent_complete」を 2 回入力する必要がないようにできれば、ほとんど解決します。

4

2 に答える 2

4

Numeric で新しいメソッドを定義してみませんか?

class Numeric
  def safe_to_f
    self.nan? ? 0.0 : self.to_f
  end
end

必要に応じて、次を追加することもできます。

class NilClass
  def safe_to_f
    0.0
  end
end

ここに別のアイデアがあります:

class Object
  # substitute a different object if 'predicate' is true
  # if 'predicate' is :nil?, this is just like ||
  def guard(predicate,substitute)
    send(predicate) ? substitute : self
  end
end

これにより、次のように書くことができます:

percent_complete.guard(:nan?, 0)
于 2012-02-24T20:27:47.280 に答える