2011-12-14 37 views
7

Benzer iki sınıfa dahil olmak üzere var olan bir modülüm var. Her iki sınıfın aynı kullanım için modülde yer alacak yöntemlerden bazıları yeni bir örnek döndürür.Bir yakut örneği yönteminden yeni bir kendilik örneği nasıl döndürülür

Ancak, modülde kodlayıcıyı içeren sınıfın yapıcısı olarak nasıl kodlanmalıyım?

bir basitleştirilmiş bir örnek: i kurucusunu çağırmak nasıl * tanımında Yani

module Point3D 
    def initialize(x,y,z) 
    @x = x 
    @y = y 
    @z = z 
    end 

    def * (scalar) 
    <myclass>.new(@x * scalar, @y * scalar, @z * scalar) 
    end 
end 

class Vertex 
    include Point3D 
end 

class Vector 
    include Point3D 
end 

böyle Vertex sınıfının bağlamında yeni bir Vertex ve Vektör sınıf bağlamında döndü o Her sınıfta bu tür yöntemleri yeniden değerlendirmeden yeni bir Vector döndü?

cevap

12

Nesnesini almak için 'sınıf' yöntemini çağırabilirsiniz. Bu durum için

, bu modül dahildir sınıfın nesnesini almak için

def * (scalar) 
    self.class.new(...) 
end 
+1

ah adam .. saniyeler içinde beni yendiniz. : @ –

3

kullanın self.class bu.