9-1-2 オリジナルのモジュールを定義して色々な方法で使ってみよう

インスタンスが生成できないことを確認するプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule1.rbで保存します。

module ModuleSample
  def sample_method
    p 'call sample_method.'
  end
end

instance = ModuleSample.new

インスタンスが生成できないことを確認するプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に、newメソッドが未定義であるNoMethodErrorが表示されます。

$ ruby module1.rb
module1.rb:7:in `<main>': undefined method `new' for ModuleSample:Module (NoMethodError)

モジュールが継承できないことを確認するプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule2.rbで保存します。

module ModuleSample
  def sample_method
    p 'call sample_method.'
  end
end

module ModuleInheritSample < ModuleSample
end

モジュールが継承できないことを確認するプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に、文法エラーが表示されます。

$ ruby module2.rb
module2.rb:7: syntax error, unexpected '<'
module ModuleInheritSample < ModuleSample

モジュールメソッドを定義して使うプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule3.rbで保存します。

module ModuleSample
  def self.sample_method
    p 'call sample_method.'
  end

  class << self
    def sample_method2
      p 'call sample_method2.'
    end
  end
end

ModuleSample.sample_method
ModuleSample.sample_method2

モジュールメソッドを定義して使うプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に"call sample_method.""call sample_method2."が表示されます。

$ ruby module3.rb
"call sample_method."
"call sample_method2."

モジュールメソッドを別の方法で定義して使うプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule4.rbで保存します。

module ModuleSample
  def sample_method
    p 'call sample_method.'
  end

  module_function :sample_method
end

ModuleSample.sample_method

モジュールメソッドを別の方法で定義して使うプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に"call sample_method."が表示されます。

$ ruby module4.rb
"call sample_method."

クラスからモジュールをincludeして使うプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule5.rbで保存します。

module ModuleSample
  def sample_method
    p 'call sample_method.'
  end
end

class IncludeModleSample
  include ModuleSample
end

instance = IncludeModleSample.new
instance.sample_method

クラスからモジュールをincludeして使うプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に"call sample_method."が表示されます。

$ ruby module5.rb
"call sample_method."

クラスからモジュールをexcludeして使うプログラムを記述する

以下のようなプログラムを記述し、ファイル名をmodule6.rbで保存します。

module ModuleSample
  def sample_method
    p 'call sample_method.'
  end
end

class ExtendModleSample
  extend ModuleSample
end

ExtendModleSample.sample_method

クラスからモジュールをexcludeして使うプログラムを実行する

コマンドライン上でファイルを指定し実行します。実行結果に"call sample_method."が表示されます。

$ ruby module6.rb
"call sample_method."