2011-12-14 68 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获得其中包含该模块的类的对象。

相关问题