Latest web development tutorials

Ruby Modul (Modul)

Modul (Modul) ist eine Möglichkeit, Methoden, Klassen und Konstanten kombiniert Art und Weise. Module (Module) bietet Ihnen zwei Vorteile.

  • Module bieten einenNamensraumund verhindern Namenskonflikte.
  • Modul implementiertmixinGeräte.

Modul (Modul) definiert einen Namespace, das entspricht einer Sandbox, Ihre Methoden und Konstanten sind keine Konstanten und Methoden der Konflikt an anderer Stelle in sie.

Modul ähnliche Klasse, aber mit einem anderen Blick:

  • Die Module können nicht instanziiert werden
  • Modul nicht Subklassen
  • Modul kann nur von einem anderen Modul definiert werden,

Grammatik

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

Modul mit dem Namen Konstanten und Klassenkonstanten ähnlich benannten, mit einem Großbuchstaben beginnen. Methodendefinition sieht so aus: ähnliche modulare Ansatz die Klassenmethodendefinitionen zu definieren.

Durch die Klassenmethoden können Sie den Modulnamen und einen Punkt vor dem Klassennamen des Verfahrens stellen Sie den modularen Ansatz zu nennen, können Sie den Namen des Moduls und zwei Doppelpunkte verwenden, um eine Konstante zu verweisen.

Beispiele

#!/usr/bin/ruby

# 定义在 trig.rb 文件中的模块

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

Wir können mehrere Funktionen mit dem gleichen Namen, aber unterschiedlichen Funktionsmodule definieren:

#!/usr/bin/ruby

# 定义在 moral.rb 文件中的模块

module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

Wie Klassenmethoden, wenn Sie eine Methode in einem Modul definiert haben, können Sie den Modulnamen gefolgt von einem Punkt festlegen, nach Punkt nach dem Methodennamen gefolgt.

Rubinbenötigen Aussage

erfordern Anweisung C und C ++, und beinhalten Aussagen in der Java-Import-Anweisung ähnlich ist. Wenn ein Drittanbieter - Programm , das Sie eines der Module verwendet werden soll definiert sind, können Sie einfachRubyverwenden Anweisung benötigen Moduldatei zu laden:

Grammatik

require filename

Hier.RB die Dateierweiterung nicht erforderlich.

Beispiele

$ LOAD_PATH << '.'

require 'trig.rb'
erfordern "moralischen"

y = Trig.sin (Trig :: PI / 4)
Fehlverhalten = Moral.sin (Moral :: very_bad)

Hier verwenden wir$ LOAD_PATH << '.' Let Rubin wissen , dass wir für die referenzierte Datei im aktuellen Verzeichnis suchen müssen.Wenn Sie nicht wollen , $ LOAD_PATH verwenden, können Sierequire_relative verwenden , um eine Datei von einem relativen Verzeichnis zu verweisen.

Hinweis: Hier enthält die Datei die gleiche Funktion Namen.So wird dies zu Verschleierung führen, wenn an das rufende Programm bezieht, sondern Module vermeiden diesen Code-Verschleierung, und wir können den Namen des Moduls verwenden Sie die entsprechende Funktion aufzurufen.

Ruby- Include - Anweisung

Sie können ein Modul in einer Klasse einbetten. Um im Klassenmodul einzubetten, können Sieumfassenauch Aussagen in Ihrer Klasse verwenden:

Grammatik

include modulename

Wenn das Modul in einer separaten Datei definiert ist, also , bevor Sie eingebettete Modul verwenden müssen Aussagenerfordernverweisen auf die Datei.

Beispiele

Unter der Annahme , die folgenden Module insupport.rbDatei geschrieben.

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

Sie können nun das Modul in der Klasse verweisen, wie folgt:

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

Daraus ergeben sich die folgenden Ergebnisse:

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

Rubin in Mixins

Bevor Sie diesen Abschnitt lesen, benötigen Sie ein vorläufiges Verständnis der objektorientierten Konzepte.

Wenn eine Klasse mehr als eine Elternklasse sein, wenn die Feature-Class von erbt, ist die Klasse, die als Mehrfachvererbung angezeigt.

Rubin nicht direkt Mehrfachvererbung unterstützen, aber Ruby Modul (Modul) hat eine weitere fantastische Funktionen. Es beseitigt praktisch die Notwendigkeit für mehrfache Vererbung, ist eine Vorrichtung vorgesehen , umeine mixin genannt.

Rubin nicht wirklich mehrere Vererbungsmechanismus zu erreichen, sondern als mixin Technologie als Ersatz angenommen. Die Module umfassen die Klassendefinition, Konzept das Modul in die Klasse zu mischen.

Schauen wir uns die folgenden Beispielcode aussehen, in ein tiefes Verständnis von 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
  • Ein Modul wird nach dem Verfahren von a1 und a2 besteht.
  • Modul B durch die Methode der Zusammensetzung B1 und B2.
  • Sample-Klasse enthält Module A und B.
  • Sample-Klasse können alle vier Methoden zugreifen, nämlich a1, a2, b1 und b2.
  • So können Sie sehen , dass die Klasse Probe erbt zwei Module, können Sie sagen , dass die Klasse Beispiel Mehrfachvererbung odermixin verwenden.