首页 > 代码库 > Ruby学习之mixin

Ruby学习之mixin

直接上代码:

module Action  def jump    @distance = rand(4) + 2    puts "I jumped forward #{@distance} feet!"  endendclass Rabbit  include Action  attr_reader :name  def initialize(name)    @name = name  endendclass Cricket  include Action  attr_reader :name  def initialize(name)    @name = name  endendpeter = Rabbit.new("Peter")jiminy = Cricket.new("Jiminy")peter.jumpjiminy.jump----------------------------------------------------------------------输出:I jumped forward 3 feet!I jumped forward 4 feet!nil

在Ruby学习之module已经介绍了module

当一个module用来把一些行为和信息混合进一个类, 那么这种行为叫做mixin

mixin允许我们定制一个类而不需要重写这个类。

上面的代码就用到了mixin

在Action这个module中定义了jump方法。把Action包含进了类Rabbit和Cricket,那么这两个类就具有了jump这个方法,所以Rattit和Cricket的实例peter和jiminy才可以调用jump。

你也许发现了, mixin赋予了我们类似类的多继承的能力, 通过mixin这种技巧我们可以从很多module中提取很多行为添加到我们的类中。

 

Ruby学习之mixin