2011年1月10日月曜日

【ruby】オブジェクトのクラスをテスト

Rubyでインスタンスがどのクラスか?(どのクラスのサブクラス)かをチェクする方法。

変数が、どのクラスかをチェックする方法
instance_of?メソッドを使うことによってチェックできる。
array = Array.new

# array変数の実体クラスのArrayを指定した場合はtrue
puts array.class == Array          # => true
    
# 親クラスのObjectを指定さ場合は、false
puts array.instance_of? Object     # => false
    
# ミックスインモジュールのEnumerableを指定した場合はfalse
puts array.instance_of? Enumerable # => false

is_a?メソッドを使うと階層構造を含めてチェックできる。
puts array.is_a? Array        # => true
puts array.is_a? Object       # => true(親クラスをチェックできる)
puts array.is_a? Enumerable   # => true(ミックスインもチェックできる)

# Classクラスの===でも同じ比較が行える。直感的なのはis_a?かな。
puts Object === array