Rubyリファレンス: Home

const_defined? (Module)

Edit   History

標準クラス・モジュール > Module > const_defined?

mod.const_defined?(name)

const_defined?メソッドは、クラスやモジュールの中に定数があるかどうかを調べます。引数nameには定数名を:NAME"NAME"のようにシンボルか文字列で渡します。その定数があればtrueを、そうでなければfalseを返します。

引数に:nameのように定数と見なされない名前を渡すと例外NameErrorが発生します。

次の例では、Productクラスの定数TAX_RATEの有無を調べています。また、トップレベルの定数はObject.const_defined?で調べられることがわかります。

class Product
  TAX_RATE = 0.05
end
 
p Product.const_defined?(:TAX_RATE)
p Object.const_defined?(:Product)
true
true
mod.const_defined?(name [, inherit = true])

Ruby 1.9 Ruby 1.8ではconst_defined?に親クラスやインクルードしたモジュールで定義されている定数名を渡すと、falseが返ります。Ruby 1.9では親クラスやモジュールの定数でもtrueが返ります。

class Product
  TAX_RATE = 0.05
end
class Book < Product
end
 
p Book.const_defined?(:TAX_RATE)
false   (Ruby 1.8)
true    (Ruby 1.9)

Ruby 1.9では、const_defined?の第2引数にfalseを渡すと、定数がそのクラスで定義されているときだけtrueを返すようになります。

class Product
  TAX_RATE = 0.05
end
class Book < Product
end
 
p Book.const_defined?(:TAX_RATE, false)
false

関連項目