2009-08-26 12 views
12

bir sınıf daha önce ben Mesela bir sınıf AnaSeti sınıf kalıtım const_set sınıfına sınıf delcaration VEYA ayar sınıfı miras sonra

devralmak için bunu söyleyebilirim nasıl tanımlanmış ise:

class Parent 
    .. 
end 

class Klass 
    .. 
end 

Şimdi bir sınıf uyumsuzluğu hatası alırsınız çünkü

Ben sınıfını yeniden açıp ayarlayın olamaz Ana devralmak istediğiniz

class Klass < Parent 
    .. 
end 

Özellikle ben

klass = Object.const_set('Klass', Class.new) 

nasıl Klass sınıf Ana devralmak söyleyebilir Object.const_set

aracılığıyla yaratan bir sınıf im sınıf mirası nasıl ayarlanacağını öğrenmek için çalışıyorum?

cevap

24

Zaten mevcut bir sınıfın üst sınıfını değiştirmek için bir yolu yoktur.

Dinamik olarak oluşturduğunuz bir sınıfın üst sınıfını belirtmek için, süper sınıfı bir argüman olarak Class.new'a aktarmanız yeterlidir. Sadece bir yan not olarak

class Parent 
end 
klass = Class.new(Parent) 
klass.superclass #=> Parent 

: Sen const_set ile sınıfını yaratarak değiliz. Class.new ile oluşturuyorsunuz. Oluşturulan sınıfı const_set ile sabit olarak saklıyorsunuz. const_set çağrıldığında, Class.new zaten gerçekleşmiştir ve artık sınıf değiştirilemez.

+0

Teşekkür ederim, tam ihtiyacım olan buydu. –

İlgili konular