从字符串中获取常量

时间:2015-02-20 23:16:09

标签: ruby

我有以下类结构:

class A
  class B
    class C
      module M
        MY_CONST = 1000
      end
    end
  end
end

我想从字符串MY_CONST获取常量"MY_CONST"。我试过了M.const_get("MY_CONST"),但它似乎没有效果。说NameError, wrong constant name。我试图在module M内做到这一点。我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果模块名称实际上是M而不是m,则以下适用于Ruby 2.0的irb

irb(main):009:0> class A
irb(main):010:1> class B
irb(main):011:2> class C
irb(main):012:3> module M
irb(main):013:4> MY_CONST = 1000
irb(main):014:4> end
irb(main):015:3> end
irb(main):016:2> end
irb(main):017:1> end
=> 1000
irb(main):018:0> M.const_get("MY_CONST")
=> 1000
irb(main):019:0>

Ruby 1.8.7确实会出现NameError: uninitialized constant M错误,除非您完全限定模块名称:

A::B::C::M.const_get("MY_CONST")
=> 1000

答案 1 :(得分:0)

所以我做了一些非常愚蠢的事情。我试图从caller[]获取方法的名称,但是获得了整个路径并且没有正则表达式过滤常量的名称。我试图推导常数的方式没有错。