当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。