2017-07-18 107 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

相关问题