プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Ruby、モジュールあれこれ
※自分用のメモなので随時追記していきます。

・書き方は以下の通り
  module HogeModule
      #モジュールの中身
  end


・モジュールはインスタンスを作成できない

・モジュールは継承不可

・モジュールは名前空間として、もしくはクラスへmix-inして使用できる

・モジュールを使用する際はインクルードして使用する
  #module
  module HogeModule
      def hogeMethod
          puts "hoge"
      end
  end

#class
  class HogeClass
      #module include

      include HogeModule
  end
  
  #HogeClass.new.hogeMethod
  aaa = HogeClass.new
  aaa.hogeMethod


・「mix-in」っつーのは要するにmoduleさんが自クラスと
 親クラスの間に割り込みまっせってこと
 「親クラス→自クラス」に対してモジュールをincludeすることにより
 「親クラス→モジュール→自クラス」になる
 Rubyでは単純継承しかできないのでそのための仕組みなんでしょうね

  #module
  module HogeModule
      #hogeMethod定義
      def hogeMethod
          puts "HogeModule"
      end
  end
  
  #super class
  class HogeClass
      #hogeMethod定義
      def hogeMethod
          puts "HogeClass"
      end
  end

  #モジュールをインクルードしたclass 
  #HogeClassを継承している
  class HogeClass2 < HogeClass
      #module include
      include HogeModule
  
      #hogeMethod再定義
      def hogeMethod
          puts "HogeClass2"
  
          #モジュールのhogeMethod呼び出し
          super
      end
  end
  
  #モジュールをインクルードしないclass 
  #HogeClassを継承している
  class HogeClass3 < HogeClass
      #module include
  #    include HogeModule
  
      #hogeMethod再定義
      def hogeMethod
          puts "HogeClass3"
  
          #親クラスのhogeMethod呼び出し
          super
      end
  end
  
  puts "-- module includede"
  HogeClass2.new.hogeMethod
  puts "\n-- not includede"
  HogeClass3.new.hogeMethod
  

 を実行すると、結果は

  -- module includede
  HogeClass2
  HogeModule
  
  -- not includede
  HogeClass3
  HogeClass


になる

・「module_function :メソッド名」でモジュール関数になる
  #module
  module HogeModule
      def hogeMethod
          puts "HogeModule.hogeMethod"
      end
      #モジュール関数化

      module_function :hogeMethod
  end
  
  #モジュール関数として呼び出せる
  HogeModule.hogeMethod


スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● Ruby  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事