我有以下类结构:
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
内做到这一点。我错过了什么?
答案 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[]
获取方法的名称,但是获得了整个路径并且没有正则表达式过滤常量的名称。我试图推导常数的方式没有错。