はじめに
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"
さいごに
モジュールを使用することで、コードを整理し再利用可能な機能を定義することができますが、
複数のモジュールで同じ名前の関数が定義されていないか注意が必要です