2011-12-14 9 views
7

Mam moduł, który istnieje mają być zawarte w dwóch podobnych klas. Niektóre metody uwzględniane w module dla identycznego użycia przez obie klasy zwracają nową instancję.Jak zwrócić nową instancję siebie z rubinowym metody instancji

Ale jak zakodować w module że konstruktor dla klasy zawierającej należy zwany?

Uproszczony przykład:

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 

Tak w definicji * jak nazwałbym konstruktora tak, że w kontekście klasy Vertex powrócił nowy Vertex oraz w kontekście klasy Vector to zwrócił nowy wektor bez redeclaring wszystkich takich metod w każdej klasie?

Odpowiedz

12

można wywołać metodę „klasa”, aby uzyskać klasę obj.

W tym przypadku, to

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

ah man .. pokonałeś mnie sekundą. : @ –

3

Zastosowanie self.class uzyskać obiekt klasy gdzie moduł jest włączone.

Powiązane problemy