2012-03-24 63 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