はじめに
Rubyにおけるmoduleのメソッド名衝突の挙動動についてまとめました
Ruby における module とは
moduleは、コードを整理し、再利用可能な機能を定義するために使用できる、
Rubyのプログラミングの概念です
モジュールはincludeステートメントを使用してクラスに取り込むことができ、
取り込まれたモジュールの定義は現在のスコープに適用されます
複数モジュールでのメソッド名の衝突
複数のモジュールで同じ名前の関数が定義されている場合、
最後に取り込まれたモジュールの関数が使用されます
module ModuleA
def print
'a'
end
end
module ModuleB
def print
'b'
end
end
class Printer
include ModuleA
include ModuleB
end
printer = Printer.new
printer.print # => "b"
衝突の回避
alias_methodを利用して、ModuleBをincludeする前に別名に変換する
module ModuleA
def print
'a'
end
end
module ModuleB
def print
'b'
end
end
class Printer
include ModuleA
alias_method :printA, :print
include ModuleB
end
printer = Printer.new
printer.print # => "b"
printer.printA # => "a"
さいごに
モジュールを使用することで、コードを整理し再利用可能な機能を定義することができますが、
複数のモジュールで同じ名前の関数が定義されていないか注意が必要です