检查常量是否定义的正确方法是什么?
What's the proper way to check if a constant is defined?
我有一个字符串,我只想检查它是否是一个 "model"... 所以在搜索之后我找到了一个方法:
'any_name'.classify.constantize
但是...当它不是有效的模型名称时,它会抛出以下错误:
NameError (wrong constant name AnyName):
所以我尝试执行以下操作:
if Object.const_defined?('AnyName')
#...
end
# I also tried this:
Object.const_get('AnyName')
但是同样,上面的两个选项 return 都是同样的错误:
NameError (wrong constant name AnyName):
const_defined
不应该 return 只是 true/false 而不是抛出错误?
目前,我发现了这个丑陋的解决方法:
'any_name'.classify.constantize rescue nil
但是据我所知,这不是一个好的做法(rubocop 也声称这一点)。
所以,我的问题是...有安全的方法吗?
有方法safe_constantize可以帮助你,它会return nil 如果没有定义
"ModelName".classify.safe_constantize
这是 link safe_constantize
我有一个字符串,我只想检查它是否是一个 "model"... 所以在搜索之后我找到了一个方法:
'any_name'.classify.constantize
但是...当它不是有效的模型名称时,它会抛出以下错误:
NameError (wrong constant name AnyName):
所以我尝试执行以下操作:
if Object.const_defined?('AnyName')
#...
end
# I also tried this:
Object.const_get('AnyName')
但是同样,上面的两个选项 return 都是同样的错误:
NameError (wrong constant name AnyName):
const_defined
不应该 return 只是 true/false 而不是抛出错误?
目前,我发现了这个丑陋的解决方法:
'any_name'.classify.constantize rescue nil
但是据我所知,这不是一个好的做法(rubocop 也声称这一点)。
所以,我的问题是...有安全的方法吗?
有方法safe_constantize可以帮助你,它会return nil 如果没有定义
"ModelName".classify.safe_constantize
这是 link safe_constantize