Как вернуть новый экземпляр self из метода экземпляра 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 он возвращал новый Vertex, а в контексте класса Vector возвращал новый Vector без повторного описания всех таких методов в каждом классе?

7
задан Nat 14 December 2011 в 12:56
поделиться