當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby Module.const_defined?用法及代碼示例


本文簡要介紹ruby語言中 Module.const_defined? 的用法。

用法

const_defined?(sym, inherit=true) → true or false
const_defined?(str, inherit=true) → true or false

表示 mod 或其祖先是否具有給定名稱的常量:

Float.const_defined?(:EPSILON)      #=> true, found in Float itself
Float.const_defined?("String")      #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash)   #=> false

如果 modModule ,則另外檢查 Object 及其祖先:

Math.const_defined?(:String)   #=> true, found in Object

在每個檢查的類或模塊中,如果常量不存在但有自動加載,則直接返回 true 而不自動加載:

module Admin
  autoload :User, 'admin/user'
end
Admin.const_defined?(:User)   #=> true

如果未找到該常量,則不會調用回調 const_missing 並且該方法返回 false

如果inherit 為假,則查找僅檢查接收器中的常量:

IO.const_defined?(:SYNC)          #=> true, found in File::Constants (ancestor)
IO.const_defined?(:SYNC, false)   #=> false, not found in IO itself

在這種情況下,適用於自動加載的相同邏輯。

如果參數不是有效的常量名,則會引發 NameError 並顯示消息“錯誤的常量名 name”:

Hash.const_defined? 'foobar'   #=> NameError: wrong constant name foobar

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Module.const_defined?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。