是否可以缩小ruby常量查找

时间:2016-06-14 07:21:28

标签: ruby namespaces metaprogramming

我有一个模块,其中包含名为String的类(以及其他类。)我需要按名称查找类,如果没有这样的类,则优雅地退回。

module Mod1
  module String
  end
end 
Mod1.const_get 'String'
#⇒ Mod1::String
Kernel.const_get '::Mod1::String'
#⇒ Mod1::String
到目前为止,这么好。当我尝试查找不存在的类时,我预计会收到NameError,这很好。问题是如果在全局命名空间中存在具有给定名称​​的类,则返回它:

Mod1.const_get 'Fixnum'
#⇒ Fixnum < Integer
Kernel.const_get '::Mod1::Fixnum'
#⇒ Fixnum < Integer

我理解原因,但我的问题是:是否只有一个现成的方法来查找给定命名空间中的常量?

现在我用

检查结果
result.to_s.start_with?(namespace)

但这绝对不是缩小查找范围的最佳方法。

1 个答案:

答案 0 :(得分:8)

答案是:

   {
    "name": "X",
    "children": [{
        "name": "Y",
        "value": Z
    },
                {
        "name": "Y2",
        "value": Z2
    }]
   }

这是doc:

Mod1.const_get 'Fixnum', false

https://github.com/ruby/ruby/blob/449fbfd4d4ce47be227804c22214fed32a5b0124/object.c#L2027