2011-03-24 19 views
5

Yuvalanmış bir ad alanının kök sınıfını/modülünü bulmaya çalışıyorum.Yuvalanmış ad alanına yansıtma

Bunu bulmanın en etkili yolu bu mu? Bundan hoşlanmıyorum bir dizeye dönüştürüyorum. Daha zarif bir çözüm olmalı gibi görünüyor.

class Foo 
    class Bar 
    def parent 
     Object.const_get self.class.to_s.split(/::/).first 
    end 
    end 
end 

Foo::Bar.new.parent #=> Foo 

cevap

7

çok teşekkür ederim, Module.nesting

module Foo 
    module Bar 
    module Baz 
     p Module.nesting  # => [Foo::Bar::Baz, Foo::Bar, Foo] 
     p Module.nesting.last # => Foo 
    end 
    end 
end 
+0

Harika yoktur. –

+0

@sawa neden aşağıdaki çalışmıyor? Foo :: Bar :: Baz.class_eval {Module.nesting} # => [] 'veya' Foo :: Bar :: Baz.module_eval {Module.nesting} # => [] 've' Foo :: Bar. instance_eval {Module.nesting} # => [] ' – rudolph9

+0

@ rudolph9 'Yuvalama' yöntemi, ortam ortamının önemli olduğu '__dir__',' binding 'gibi birkaç yöntemden biridir. Genellikle eşdeğer olsalar bile diğer yapılarla değiştiremezsiniz. – sawa

İlgili konular