English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
モジュール(Module)はメソッド、クラス、定数を組み合わせる方法です。モジュール(Module)はあなたに大きな利点を提供します。
モジュールは以下を提供します。命名空間と名前空間。
モジュールは以下を実現し、名前の衝突を避けます。 mixin 装置。
モジュール(Module)は名前空間を定義し、沙箱として機能し、その中のメソッドや定数は他の場所のメソッドや定数と衝突しません。
モジュールはクラスに似ていますが、以下の点で異なります:
モジュールはインスタンス化できません。
モジュールにはサブクラスがありません。
モジュールは他のモジュールによってのみ定義できます。
module Identifier statement1 statement2 ........... end
モジュールの定数の命名はクラスの定数の命名に似ており、大文字で始まります。メソッドの定義も似ています:モジュールメソッドの定義はクラスメソッドの定義に似ています。
クラスメソッドの前にモジュール名と点号を置いてモジュールメソッドを呼び出すことができます。また、モジュール名と2つのダッシュを用いて定数を参照できます。
#!/usr/bin/ruby # trig.rbファイル内で定義されたモジュール module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
機能が異なる同名の複数のモジュールを定義できます:
#!/usr/bin/ruby # moral.rbファイル内で定義されたモジュール module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
クラスメソッドのように、モジュール内でメソッドを定義する場合、モジュール名の後に点号を付け、その後メソッド名を指定できます。
require文はCとC++のinclude文に似ています。++ Javaのimport文と同様に、第三者のプログラムが定義されたモジュールを使用する場合は、Rubyのrequire文を使用できます。 require ステートメントを使用してモジュールファイルをロードします:
require filename
ここでは、ファイルの拡張子 .rb 必須ではありません。
$LOAD_PATH << '.' require 'trig.rb' require 'moral' y = Trig.sin(Trig::PI/4) wrongdoing = Moral.sin(Moral::VERY_BAD)
ここでは、以下を使用しています。 $LOAD_PATH << '.' Ruby が参照されたファイルを現在のディレクトリで検索する必要があることを知らせる。$LOAD_PATHを使用したいと思わない場合、以下のように使用できます。 require_relative require_relative
から相対ディレクトリを参照するために使用します。注意:
クラスにモジュールを埋め込むために、クラス内で以下の文を使用できます。 include 文:
include modulename
モジュールが別々のファイルで定義されている場合、モジュールをインクルードする前に require このファイルを参照するステートメント。
以下のモジュールは、以下の場所に書かれていると仮定します。 support.rb ファイル中。
module Week FIRST_DAY = "日曜日" def Week.weeks_in_month puts "あなたは月に4週間あります" end def Week.weeks_in_year puts "あなたは 52 年間の週数" end end
今や、以下のようにクラスでこのモジュールを参照できます:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
これにより以下の結果が得られます:
日曜日 あなたは月に4週間あります あなたは 52 年間の週数 日曜日 120
このセクションを読む前に、面向オブジェクトの概念について基本的な理解が必要です。
クラスが複数の親クラスからクラスの特性を継承できる場合、そのクラスは多重継承と表示されます。
Rubyは直接多重継承をサポートしていませんが、Rubyのモジュール(Module)にはもう一つの魔法の機能があります。それは多重継承の必要性をほぼ取り除き、 mixin の装置。
Rubyは実際には多重継承メカニズムを実装していないため、mixin技術を代替品として採用しています。モジュールをクラス定義にincludeすると、モジュール内のメソッドがクラスにmixされます。
以下の例コードを見てみましょう、mixin についてさらに詳しく見てみましょう。
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
モジュール A はメソッド a1 と a2 構成。
モジュール B はメソッド b1 b2 構成。
クラス Sample はモジュール A と B を含んでいます。
クラス Sample は 4つのすべてのメソッドにアクセスできます、つまり a1、a2、b1 b2。
したがって、クラス Sample が 2つのモジュールを継承していることがわかります。多重継承と呼ぶこともできます。 mixin 。