在一级扩展中使用`defined?`

时间:2013-06-21 05:26:35

标签: ruby metaprogramming

方法defined?给出作为参数给出的逐字表达式的结果。例如,

的结果
defined? foo

foo字面上是否是任何已定义的变量/方法都很敏感。将foo定义为有效(现有)表达式的字符串是不同的:

foo = "Array"

与否:

foo = "NonExistingConstant"

是否可以使defined?对扩展一级的给定参数敏感?也就是说,对于foo = "Array",它应该返回"constant"而对于foo = "NonExistingConstant",它应该返回nil。如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

因为你只需要检查常数:

['Array', 'NonExistentClass'].each do |name|
  puts Object.const_defined?(name)
end
# >> true
# >> false