检查类是否有嵌套类?

Tar*_*len 1 ruby ruby-on-rails ruby-on-rails-4

假设我有一个XXXPriceDocument可能有内部类的类LargePackageCharge,我该如何检查它是否存在?

Bro*_*tse 6

你可以做:

XXXPriceDocument.constants.include?(:LargePackageCharge)
Run Code Online (Sandbox Code Playgroud)

要么

defined?(XXXPriceDocument::LargePackageCharge)
Run Code Online (Sandbox Code Playgroud)

要么

XXXPriceDocument.const_defined?(:LargePackageCharge)
Run Code Online (Sandbox Code Playgroud)

它在rails中稍微复杂一些,因为常量可能还没有加载.你需要解决这个问题:

class Module
  def const_exists?(mod)
    !!const_get(mod) 
  rescue NameError
    false
  end
end

XXXPriceDocument.const_exists?(:LargePackageCharge)
Run Code Online (Sandbox Code Playgroud)

  • 但是,这不会检查类,仅用于常量.你仍然需要`const_get`常量引用的对象并检查它是否是`is_a?(Class)`. (2认同)