如何从ruby实例方法返回一个新的self实例

时间:2011-12-14 12:56:31

标签: ruby

我有一个模块,它存在于两个相似的类中。模块中包含的一些方法可供两个类使用相同的方法返回一个新实例。

但是如何在模块中编码应该调用包含类的构造函数?

简化示例:

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

所以在*的定义中我将如何调用构造函数,使得在Vertex类的上下文中它返回一个新的顶点,并在Vector类的上下文中返回一个新的Vector而不重新声明所有这样的每个班级的方法?

2 个答案:

答案 0 :(得分:13)

你可以调用'class'方法来获取obj的类。

对于这种情况,它是

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

答案 1 :(得分:3)

使用self.class获取包含模块的类的对象。