我有一个模块,它存在于两个相似的类中。模块中包含的一些方法可供两个类使用相同的方法返回一个新实例。
但是如何在模块中编码应该调用包含类的构造函数?
简化示例:
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而不重新声明所有这样的每个班级的方法?
答案 0 :(得分:13)
你可以调用'class'方法来获取obj的类。
对于这种情况,它是
def * (scalar)
self.class.new(...)
end
答案 1 :(得分:3)
使用self.class获取包含模块的类的对象。