memo.log

技術情報の雑なメモ

【Ruby】名前空間の使い方のメモ

Ruby名前空間の使い方のメモ:

  • モジュール内でクラスが呼ばれた場合、既に同名モジュールでクラスが定義されていたら、そのモジュールのクラスが呼ばれる
  • 同名モジュール外のクラスを呼ぶ場合は、 :: を一番左につけてトップレベルと明示する
# トップレベルの Test クラス
class Test
  def hello
    "Test#hello"
  end
end

module Kure
  # まだ Kure::Test が無いのでトップレベルの Test が呼ばれる
  puts Test.new.hello # => Test#hello
end

# Kure モジュール内の Test クラス
module Kure
  class Test
    def hello
      "Kure::Test#hello"
    end
  end
end

# 普通にトップレベルの Test が呼ばれる
puts Test.new.hello # => Test#hello

module Kure
  # Kure::Test が既に定義されているので Kure モジュール内で呼ばれた
  # Test クラスは Kure::Test が呼ばれる
  puts Test.new.hello # => Kure::Test#hello

  # :: を左に付けてトップレベルの Test クラスを明示的に呼ぶ
  puts ::Test.new.hello # => Test#hello
end