0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyにおけるmoduleのメソッド名衝突の挙動

Last updated at Posted at 2023-05-16

はじめに

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"

さいごに

モジュールを使用することで、コードを整理し再利用可能な機能を定義することができますが、
複数のモジュールで同じ名前の関数が定義されていないか注意が必要です

0
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?