Rails如何在未实例化的情况下检查类的存在性?

zak*_*o42 4 ruby meta ruby-on-rails

我有一个用一堆类方法定义的实用程序类.在Rails控制台中,当我使用Object.const_defined?它搜索类时返回false.但在调用其中一个类方法或创建该类的实例后,Object.const_defined?返回true.这是因为某种延迟加载实例化的事情吗?有没有其他方法可以检查是否存在将返回true的类,即使我还没有实例化任何东西?

ush*_*sha 7

这有点像黑客,但它确实有效

Object.const_get(:ClassName).is_a?(Class) rescue false
Run Code Online (Sandbox Code Playgroud)

如果定义了类,则上面的语句将返回true,否则返回false

  • 不会`!! ClassName rescue false`更简单吗? (4认同)

小智 6

您可以使用safe_constantize.

  your_class = "YourClassName".safe_constantize
  if your_class && your_class.class == Class
    your_class.new(options).run
  end
Run Code Online (Sandbox Code Playgroud)