Rubyのモジュールとブレンドタイプに関する知識を紹介します
3464 ワード
モジュールは組み合わせられた方法、クラス、定数です.モジュールの2つの主なメリット:モジュールは、名前の競合を回避するネーミングスペースを提供します. モジュールはハイブリッド工場を実現する.
モジュールは名前空間を定義し、砂箱の中の方法と定数を自由に使用することができ、他の方法と定数を踏む心配はありません.構文:
クラス定数モジュールと命名された定数のように、頭文字は大文字です.定義の方法は似ているように見えますが、モジュール定義の方法はクラスの方法のようです.
モジュールメソッドを呼び出すには、クラスメソッドと同様に、モジュールの名前の前に定数を参照してモジュールの名前と2つのコロンを使用します.例:
同じ関数名を定義できますが、異なる機能モジュールでは:
クラスのメソッドと同様に、1つのモジュールで定義されたメソッドが、指定されたモジュール名の後ろにポイントが付いている場合、そのメソッドの名前.Ruby require文:
require文は、C/C++のinclude文とJavaに類似したimport文を宣言します.3番目のプログラムで定義されたモジュールを使用する場合は、Ruby require文でロードされたモジュールファイル:構文:
require filename
ここでは必要ありませんrbファイル名拡張.例:
重要:この2つのファイルには、同じ関数名が含まれています.したがって、これにより、呼び出しプログラムに含まれるコードの曖昧さが発生しますが、モジュールはこのコードの曖昧さを回避し、適切な機能モジュールの名前を呼び出すことができます.Ruby include文:
クラスモジュールに埋め込むことができます.クラスにモジュールを埋め込むには、クラスのinclude文:構文:
include modulename
モジュールが個別のファイルに定義されている場合、クラスのrequire文の前に公開されたモジュールに隠す必要があるファイルを含める必要があります.例:
次のモジュールをsupportに書くことを考慮する.rbファイル.
このモジュールは、次のように構成できます.
これにより、次の結果が得られます.
Rubyのブレンドタイプ:
本節の前に,オブジェクト向けの概念と知識があると仮定する.
クラスが複数の親から継承できるフィーチャーの場合、クラスには複数の継承が表示されます.
Rubyは直接suppoprtに継承されていませんが、Rubyのモジュールにはもう一つの素晴らしい使用があります.彼らは多重継承の必要性をほとんど解消し、混入と呼ばれる工場を提供した.
ハイブリッドタイプは、素晴らしい制御方法に機能クラスを追加します.コードにクラスをブレンドし、そのコードを使用してインタラクションできます.
ブレンドタイプについては、次のサンプルコードを見てみましょう.
モジュールAは、a 1およびa 2の方法を含む.モジュールBは、方法、b 1およびb 2を含む.クラス例が2つのモジュールAおよびBクラスを含むサンプルは、a 1、a 2、b 1またはb 2の4つのすべての方法にアクセスすることができる.したがって,このクラスは2つのモジュール試料から継承されていることがわかる.したがって,クラスの例は多重継承や混入を示しているといえる.
モジュールは名前空間を定義し、砂箱の中の方法と定数を自由に使用することができ、他の方法と定数を踏む心配はありません.構文:
module Identifier
statement1
statement2
...........
end
クラス定数モジュールと命名された定数のように、頭文字は大文字です.定義の方法は似ているように見えますが、モジュール定義の方法はクラスの方法のようです.
モジュールメソッドを呼び出すには、クラスメソッドと同様に、モジュールの名前の前に定数を参照してモジュールの名前と2つのコロンを使用します.例:
#!/usr/bin/ruby
# Module defined in trig.rb file
module Trig
PI = 3.141592654
def Trig.sin(x)
# ..
end
def Trig.cos(x)
# ..
end
end
同じ関数名を定義できますが、異なる機能モジュールでは:
#!/usr/bin/ruby
# Module defined in moral.rb file
module Moral
VERY_BAD = 0
BAD = 1
def Moral.sin(badness)
# ...
end
end
クラスのメソッドと同様に、1つのモジュールで定義されたメソッドが、指定されたモジュール名の後ろにポイントが付いている場合、そのメソッドの名前.Ruby require文:
require文は、C/C++のinclude文とJavaに類似したimport文を宣言します.3番目のプログラムで定義されたモジュールを使用する場合は、Ruby require文でロードされたモジュールファイル:構文:
require filename
ここでは必要ありませんrbファイル名拡張.例:
require 'trig.rb'
require 'moral'
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)
重要:この2つのファイルには、同じ関数名が含まれています.したがって、これにより、呼び出しプログラムに含まれるコードの曖昧さが発生しますが、モジュールはこのコードの曖昧さを回避し、適切な機能モジュールの名前を呼び出すことができます.Ruby include文:
クラスモジュールに埋め込むことができます.クラスにモジュールを埋め込むには、クラスのinclude文:構文:
include modulename
モジュールが個別のファイルに定義されている場合、クラスのrequire文の前に公開されたモジュールに隠す必要があるファイルを含める必要があります.例:
次のモジュールを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
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は直接suppoprtに継承されていませんが、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
モジュールAは、a 1およびa 2の方法を含む.モジュールBは、方法、b 1およびb 2を含む.クラス例が2つのモジュールAおよびBクラスを含むサンプルは、a 1、a 2、b 1またはb 2の4つのすべての方法にアクセスすることができる.したがって,このクラスは2つのモジュール試料から継承されていることがわかる.したがって,クラスの例は多重継承や混入を示しているといえる.