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声称这个)。
所以,我的问题是...有没有一种安全的方法来做到这一点?
感谢。这就是我想要的:)顺便说一句,你能告诉我为什么'Object.const_defined?'返回错误而不是简单的'true/false'吗? –
此链接可以更好地解释你的问题.const_defined? https://stackoverflow.com/a/5758492/938947 – widjajayd