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)}です。"