Ruby(3)モジュール

■モジュール
module ModuleSampleで定義


#モジュールに含めたメソッドの呼び出しサンプル
module ModuleSample #モジュールの定義
def self.hoge
puts "hoge-"
end
end
ModuleSample.hoge
「モジュール名::クラス名」や
「モジュール名::定数」、「モジュール名::モジュール名::メソッド」の構造になる
モジュールには次の2つの機能がある。
名前空間

#sample1
module ModuleSamplea #モジュールを定義する
def self.hoge
puts "hogeA"
end
end

module ModuleSampleb #モジュールを定義する
def self.hoge
puts "hogeB"
end
end

ModuleSamplea::hoge #hogeAが出力される
ModuleSampleb::hoge #hogeBが出力される


#sample2
module IroiroBox
class SampleClass #クラスを定義
def hoge
puts "yaaa!"
end
end

def self.samplemethod #モジュールメソッドの定義はself.で始める
puts "yaha!"
end

TEST_FIXNUM="777" #定数を定義
end

module IroiroBox2
module IroiroBox3
def self.hoge
puts "yaaaa!"
end
end
end

a = IroiroBox::SampleClass.new #モジュールに含めたクラスのインスタンスを生成する
a.hoge #インスタンスのメソッドを呼び出す
IroiroBox::samplemethod #モジュールのメソッドを呼び出す
puts IroiroBox::TEST_FIXNUM #モジュールに含めた定数を表示する
IroiroBox2::IroiroBox3::hoge #モジュールに含めたモジュールのメソッドを呼び出す


・mix-in
mix-inとは、モジュールをクラスに組み込むことです。
クラス内でinclude句を使えばモジュールを取り込むことができる。1つのモジュールから複数のクラスへ組み込めるし、また、複数のモジュールをひとつのクラスにincludeすることができる。


#sample1
module SampleModuleA #モジュールを定義する
def A #メソッドを定義する
puts "hoge hoge"
end
end

module SampleModuleB #モジュールを定義する
def B #メソッドを定義する
puts "hoge hoge hoge"
end
end

class ClassSample #クラスを定義する
include SampleModuleA #モジュールをincludeする
include SampleModuleB #モジュールをincludeする
end

a = ClassSample.new #インスタンスの生成
a.A #includeしたメソッドの呼び出し
a.B #includeしたメソッドの呼び出し


#sample2
#クラスへComparableモジュールをmix-inして使ってみる
class SampleClass #クラスを定義する
include Comparable #Comparableモジュールをインクルードする
attr :voice
def initialize(voice)
@voice = voice
end

def <=>(other) #Comparableモジュールは比較する対象を"<=>"メソッドに定義する
voice.length <=> other.voice.length
end
end

a1 = SampleClass.new("hoge")
a2 = SampleClass.new("Yaaaa!")
puts a1 < a2 #文字列の長さを比較し、正しければtrueを返す