2011-12-14 66 views
7

我有一個模塊,它存在於兩個類似的類中。一些要包含在模塊中以供兩個類使用相同的方法返回一個新的實例。如何從ruby實例方法返回self的新實例

但是,如何在模塊中編碼包含類的構造函數應該被調用?

一個簡單的例子:

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 

所以在*如何將我調用構造函數的定義,但在頂點類的上下文,它返回一個新的頂點和Vector類的背景下,在沒有在每個類中重新聲明所有這些方法的情況下返回一個新的Vector?

回答

12

您可以調用'class'方法來獲取obj類。

對於這種情況,這是

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

啊男人..你秒殺我。 :@ – 2011-12-14 13:09:17

3

使用self.class獲得其中包含該模塊的類的對象。

相關問題