【问题标题】:Rails how do I check for existance of a class when not instantiated yet?Rails如何在尚未实例化时检查类的存在?
【发布时间】:2014-02-06 20:46:28
【问题描述】:

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

【问题讨论】:

  • 你可以尝试快速加载它们;如果该类尚未加载,则表示尚未加载,例如,stackoverflow.com/q/19839847/438992
  • @Dave 感谢您提供的信息,这有助于我更好地理解

标签: ruby-on-rails ruby meta


【解决方案1】:

这是一种 hack,但它确实有效

Object.const_get(:ClassName).is_a?(Class) rescue false

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

【讨论】:

  • !!ClassName rescue false 不会更简单吗?
  • 是的,那是另一种方式
  • ClassName rescue false 怎么样? ClassName 如果存在则为真 =)
  • 我想知道是否有办法在不处理异常的情况下做到这一点?
【解决方案2】:

您可以使用safe_constantize

  your_class = "YourClassName".safe_constantize
  if your_class && your_class.class == Class
    your_class.new(options).run
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2020-06-17
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多