Я бы предложил использовать наследование или миксин ; по моему мнению, использование миксина было бы более разумной идеей, хотя для новичка проще использовать наследование.
Помните, что вы всегда можете наследовать от класса и изменять поведение или оборачивать его новым кодом по желанию.
class Mammal
def speak
"..."
end
end
class Cat < Mammal
def speak
"meow"
end
end
class Lion < Cat
def speak
"get ready for a big " + super + "!"
end
end
module Asexual_Critter
def reproduce(critter_list)
puts "*poink!*"
critter_list << self.clone
end
end
class Mutated_Kitty < Cat
include Asexual_Critter # inane example I know, but functional...
end
Просто помните, что если вы хотите поиграть с этим, не делать:
critters = [Mutated_Kitty.new]
begin
critters.each { |c| c.reproduce(critters) }
end while critters.length > 0
Или же вам придется долго ждать, пока не закончится ОЗУ, или, возможно, segfault.