Rubyのモジュールとミックスイン

モジュールとは

名前空間を提供する機能

クラスとモジュールの違い

・モジュールはインスタンスを持つことができない
・モジュールは継承できない

モジュールを作る

module モジュール名
  処理
end

定数

module Site
  Name = "名前"
end

print Site::Name

ミックスインとは

・クラスにモジュールを取り込むこと
・モジュールにメソッドをまとめておき、その機能をクラスに取り入れ、クラスの機能を拡張できる
・複数の親クラスを持つサブクラスは作れないが、複数のモジュールをクラスに取り込むことができる

ミックスインの例

module Radar
  def distance_to(other)
    Math.sqrt( (self.x - other.x) ** 2 + (self.y - other.y) **2 )
  end
end

class Robot

  include Radar
  attr_accessor :name, :x, :y

  def initialize(name)
    @name = name
    @x = @y = 0
  end

  def move(x, y)
    @x += x
    @y += y
  end

end

robo1 = Robot.new("ロボ1号")
robo2 = Robot.new("ロボ2号")
robo2.move(12, 35)
puts "距離は#{robo1.distance_to(robo2)}です。"