2011-06-22 9 views
8

Üzerinde çalıştığım bir Rails uygulamasında, tek düğümlü miras modeli “Düğüm” ile ilgili bir modelim var: Düğümde olası herhangi bir alt sınıf, Tür tablosunda bir Tip olarak tanımlanır.Dinamik sınıf yükleme: Ruby'de sınıflar için bir "method_missing" var mı?

Şu anda bu bir başlatıcıdaki tüm sınıfları yüklemek mümkün, ancak alt sınıfları yalnızca gerektiğinde yüklemek istiyorum.

Düşünebildiğim en iyi çözüm, bir sabitin uygulamada bir sınıfı temsil edip edemeyeceğini kontrol edecek, başlatılmamış bir sabit üzerinde bir geri dönüşe sahip olacaktı, metod_missing'in yaptığı gibi.

Bu mantığı nasıl ve nerede tanımlayacağınız konusunda veya daha iyi bir çözüm varsa tamamen tavsiye ediyorum.

cevap

10

Module#const_missing var:

http://apidock.com/ruby/Module/const_missing

ben yapabilirsiniz (ab) ihtiyaçlarınız için kullanabilirsiniz varsayalım.

+0

ops sınıf yöntemi olarak eksik olan yöntemi kullanmak mümkündür! Sadece birkaç saniye sonra aynı cevabı yayınladım: P –

+0

Anladığım kadarıyla (ab) en iyi uygulamalardan uzak olarak kullanıyorsunuz? :) Durumda, herhangi bir öneri memnuniyetle ve takdir daha fazladır.Ama tam olarak ne aradığımı, çok teşekkürler! – amencarini

+2

Oh, söylemedim ki, metaforgramlamada kullanım ile kötüye kullanım arasındaki zamanın çok fazla olduğu küçük bir bıçaktı. Çoğunlukla ben suçlu parti değilim ...-) –

-1

Belki de rescue tanımsız bir sabit hata yapabilir ve sınıflarınızı yükleyebilir/oluşturabilirsiniz.

14

bu yeni ise bilmiyorum hakkında ama düşündüğüm gibi o ekleyerek değerdi.

class Example 
    def method_missing(method_name, *arguments, &block) 
    puts 'needs this instance method' 
    end 

    def self.method_missing(method_name, *arguments, &block) 
    puts 'needs this class method' 
    end 
end 
+1

Test, bu doğru cevap gibi görünüyor. – nurettin

İlgili konular