2014-02-06 26 views
4

我有一個實用工具類定義了一堆類方法。在Rails控制檯中,當我使用Object.const_defined?搜索該類時,它將返回false。但在調用其中一個類方法或創建類的實例後,Object.const_defined?返回true。這是因爲某種懶惰加載實例化的東西?有沒有另一種方法可以檢查一個類是否存在,即使我還沒有實例化任何東西,它將返回true。Rails如何在未實例化時檢查類的存在?

+0

你可能會試着急於加載它們;如果該類尚未加載,則尚未加載,例如http://stackoverflow.com/q/19839847/438992 –

+0

@Dave感謝您的信息,這有助於我更好地理解 – zako42

回答

5

這是怎樣的一個黑客,但它的作品如果類定義

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

上述聲明將返回true,並返回false,否則

+4

不會'! !ClassName救命假'更簡單? – BroiSatse

+0

是的,那是另一種方式 – usha

+0

ClassName rescue怎麼樣? ClassName是truthy,如果它存在=) – Abdo

6

您可以使用safe_constantize

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