2017-07-18 108 views
1

我有一個字符串,我只是想檢查它是否是一個「模範」 ......所以搜索後,我找到了一個方法:檢查常量是否被定義的正確方法是什麼?

'any_name'.classify.constantize 

但是...當它是不是一個有效的型號名稱,它拋出以下錯誤:

NameError (wrong constant name AnyName):

於是,我就做到以下幾點:

if Object.const_defined?('AnyName') 
    #... 
end 

# I also tried this: 
Object.const_get('AnyName') 

但同樣,這兩個以上選項返回相同的錯誤:

NameError (wrong constant name AnyName):

const_defined不應該只返回true/false而不是拋出一個錯誤?

目前,我發現這個醜陋的解決方法:

'any_name'.classify.constantize rescue nil 

但據我所知它不被認爲是一個很好的做法(也rubocop聲稱這個)。

所以,我的問題是...有沒有一種安全的方法來做到這一點?

回答

2

有方法safe_constantize,可以幫助你,它會在情況下返回nil沒有定義

"ModelName".classify.safe_constantize 

這是鏈接safe_constantize

+0

感謝。這就是我想要的:)順便說一句,你能告訴我爲什麼'Object.const_defined?'返回錯誤而不是簡單的'true/false'嗎? –

+0

此鏈接可以更好地解釋你的問題.const_defined? https://stackoverflow.com/a/5758492/938947 – widjajayd

相關問題