如果有的话,Ruby中的继承组合有什么意义呢?

时间:2012-05-29 01:36:44

标签: ruby oop

  

可能重复:
  ruby inheritance vs mixins

以下是Ruby中的常见模式:

module Persistable
  def initialize
    # Initialize a persistable document.
  end
end

class Foo
  include Persistable
end

简单地进行子类化有什么优势呢?

class PersistableDocument
  def initialize
    # Initialize a persistable document.
  end
end

class Foo < PersistableDocument
end

换句话说,为什么你会混合定义一个对象应该如何实例化的行为,如果完成所有这些是一个额外的代码行?

1 个答案:

答案 0 :(得分:1)

当您需要共享许多类的代码而不仅仅是一个类时,应该使用模块。想想Ruby中使用的最常见的模块Enumerable。它希望包含在一个实现每个方法的对象中,该方法接受一个参数。

一旦它包含在这样的对象中,它将为其所有方法提供实现。所以这是使用模块的情况,你有一个共同的行为,你想与许多类共享这种行为,然后你可以使用一个模块来实现它。

模块不是替换继承的东西,它们只允许给你另一个选项来组成对象的行为。