技術メモ

主にRuby関連

Rubyのcase式で気を付けること への追記

Qiitaに載せた『Rubyのcase式で気を付けること』でcase式の評価に
Rangeオブジェクトを使う時の注意点を書いたけど、
Classオブジェクトの方が問題が発生し易いかな?

オブジェクトの素性を調べる時に Object#class を使用しないでね

def caution_case(obj)
  case obj
  when Fixnum
    "Fixnum"
  when Float
    "Float"
  when Bignum
    "Bignum"
  else
    "other class"
  end
end

# ダメなcase
caution_case( 1.class )                   # => "other class"
caution_case( 1.0.class )                 # => "other class"
caution_case( 9999999999999999999.class ) # => "other class"

# 正しいcase
caution_case( 1 )                         # => "Fixnum"
caution_case( 1.0 )                       # => "Float"
caution_case( 9999999999999999999 )       # => "Bignum"