2012-03-24 35 views
3

引用(Ruby name of Module from a class defined withinModule.nesting within instance_eval/exec or module_eval/exec获取模块类是在没有字符串操作

在下面的设置中定义:

module Foo 
    class Bar 
    end 
end 

是否有办法让模块名Foo,而不必修改Bar而不需要对完全限定名称Foo::Bar进行字符串操作?

+1

这有什么错字符串操作的一点点,还是你只是好奇,如果这是可能的吗? – 2012-03-24 23:34:45

+1

如果有一个字符串,它必须从某种元数据生成,我宁愿处理数据本身而不是字符串,因为这可能会阻止边缘情况出现。不要说字符串操作不好。是的,也是好奇心。 – Femaref 2012-03-24 23:37:16

+0

我想你可以编写一个快速C扩展,它与'Module.nesting'相同,不需要'NODE_FL_CREF_PUSHED_BY_EVAL'检查。我不确定你会遇到什么样的陷阱。 – 2012-03-25 00:29:13

回答

0

我欺骗,我不修改BarClass

class Class 
    def my_module 
    self.to_s.split('::').first 
    end 
end 

module Foo 
    class Bar  
    end 
end 

p Foo::Bar.my_module #-> "Foo" 

#Works also after include 
include Foo 
p Bar.my_module #-> "Foo" 
+0

不会处理多个嵌套模块,我可以轻松地在'Foo :: Bar.name'上操作。 – Femaref 2012-03-25 00:28:59