9-2-3 モジュールで名前空間を定義して使う方法を確認しよう

モジュールに定数を定義する

モジュールに定数を定義する方法は、クラスに定数を定義する方法と全く同じです(「7章 クラスを使おう」参照)。

定数を定義するには、先頭を半角英字の大文字にします。定数は、クラスやモジュールと区別する為に全て大文字とアンダースコアを使用することが一般的です。

定数を使う場合も同じで、トップレベルからはモジュール::定数として参照することができます。

モジュール内に定義されたメソッドからはモジュール::を省略して、単に定数名で参照することができます。

トップレベルでモジュールをインクルードする

クラス内でモジュールをインクルードするだけでなく、トップレベルでモジュールを直接インクルードすることもできます。

モジュールを直接インクルードすると、モジュール内の定義がそのまま取り込まれるので、モジュール名を省略して直接参照することができます。

モジュールの中にクラスを定義する

モジュール定義のmodule モジュール名endで囲まれた中に、クラスを定義することもできます。

モジュールの中にクラスを定義する場合は、インデントします。

このように定義したクラスをトップレベルから参照するには、モジュール名::クラス名のように記述します。

インスタンスを生成するには、モジュール名::クラス名.newとします。

前ページ「9-2-2 モジュールに定数やクラスを定義してみよう」の例では、ModuleSample::ClassSample.newとしてModuleSampleモジュール内に定義されたClassSampleクラスのインスタンスを生成しています。

同様に、クラスメソッドを呼ぶ場合は、モジュール名::クラス名.メソッド名とします。

# モジュールの中にクラスを定義する
module モジュール名
  class クラス名
    def メソッド名
      # 処理
    end
end

instance = モジュール名::クラス名.new
instance.メソッド名

まとめ

  • モジュールは名前空間としての側面を持つ
  • モジュール内にはメソッドだけでなく、定数やクラスを定義することができる