Latest web development tutorials

Rubyのモジュール(モジュール)

モジュール(モジュール)の方法を組み合わせた方法、クラス、および定数への道です。 モジュール(モジュール)の2つの利点を提供します。

  • モジュールは、名前空間を提供し、名前の競合を防ぎます。
  • モジュールは、 ミックスインデバイスを実装しています。

モジュール(モジュール)は、名前空間、サンドボックスと同等のものを定義し、あなたの方法と定数は定数と他の場所での紛争の方法ではありません。

同様のクラスをモジュールが、異なる表情を持ちます:

  • モジュールは、インスタンス化することはできません
  • 何のサブクラスをモジュールません
  • モジュールは他のモジュールで定義することができます

文法

module Identifier
   statement1
   statement2
   ...........
end

モジュールは、同様に、大文字で始まる名前の定数およびクラス定数の名前。 クラスメソッドの定義を定義するために同様のモジュールアプローチ:メソッドの定義は次のようになります。

クラスメソッドを通じて、あなたはモジュール名とモジュール方式を呼び出すメソッドのクラス名の前にドットを配置することができ、あなたは定数を参照するためにモジュール名と二つのコロンを使用することができます。

#!/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

クラスメソッドと同様に、あなたはモジュール内でメソッドを定義するときにドットがメソッド名に続いた後、あなたが続くドットモジュール名を指定することができます。

Rubyは声明を必要とします

文はCやC ++に似ており、Javaのimport文で文を含める必要があります。 あなたはモジュールのいずれかを使用するサードパーティ製のプログラムが定義されている場合は、単にRubyはモジュールファイルをロードするステートメントを必要と使用することができます。

文法

require filename

ここでは、ファイル拡張子は必要ありません.RB。

$ LOAD_PATH << '。'

「trig.rb 'を必要と
「道徳的」必要

Y = Trig.sin(トリッグ:: PI / 4)
不正行為= Moral.sin(道徳:: VERY_BAD)

ここでは、<< $ LOAD_PATHを使用する'。' Rubyは、我々は現在のディレクトリ内の参照先のファイルを検索しなければならないことを知ってみましょう。 あなたが$ LOAD_PATHを使用したくない場合は、相対ディレクトリからファイルを参照するためにrequire_relativeを使用することができます

注:ここでは、ファイルには、同じ関数名が含まれています。そのため、呼び出し側のプログラムに言及する場合、これは難読化につながるが、モジュールは、このコードの難読化を避け、我々は適切な関数を呼び出すために、モジュールの名前を使用することができます。

Rubyはステートメントを含めます

あなたはクラスのモジュールを埋め込むことができます。 クラスモジュールに埋め込むためには、あなたのクラスにinclude文を使用することができます。

文法

include modulename

モジュールが別のファイルに定義されている場合は、あなたが埋め込まれたモジュールを使用する必要があります前に、文がファイルを参照する必要があります。

support.rbファイルに記述された以下のモジュールを仮定すると。

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   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

これにより、以下の結果が得られます。

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

ミックスインでルビー

このセクションを読む前に、あなたは、オブジェクト指向の概念の予備的な理解が必要になります。

フィーチャクラスから継承するときに、クラスが複数の親クラスであることができるとき、クラスは多重継承のように表示されます。

Rubyは直接多重継承をサポートしていませんが、Rubyのモジュール(モジュール)は、別の素晴らしい機能を備えています。 これは事実上、多重継承する必要がなくなり、 ミックスインと呼ばれる装置が提供されます

Rubyは本当に多重継承メカニズムを達成するが、代替として、ミックスイン技術として採用されていません。 モジュールはクラス定義、クラスにミックスするためのモジュールのアプローチがあります。

次のサンプルコード、ミックスインの深い理解を見てみましょう:

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
  • モジュールは、A1とA2のプロセスによって構成されています。
  • 組成B1とB2の方法により、モジュールB。
  • サンプルクラスは、モジュールAおよびBを含んでい
  • Sampleクラスは、すべての4つの方法、すなわち、A1、A2、B1およびB2にアクセスすることができます。
  • ですから、クラスのサンプルは、2つのモジュールを継承していることがわかります、あなたはクラスのサンプルは、多重継承やミックスインを使用すると言うことができます