English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Module Ruby (Module)

Le module (Module) est un moyen de regrouper des méthodes, des classes et des constantes. Le module (Module) vous offre deux grands avantages.

  • Le module fournitl'espace de nomet évitent les conflits de noms.

  • Les modules implémentent mixin dispositif.

Le module (Module) définit un espace de nom, équivalent à un sandbox, dans lequel vos méthodes et constantes ne seront pas en conflit avec d'autres méthodes et constantes ailleurs.

Les modules sont similaires aux classes, mais diffèrent par les points suivants :

  • Les modules ne peuvent pas être instanciés

  • Les modules n'ont pas de sous-classe

  • Les modules ne peuvent être définis que par un autre module

la syntaxe

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

Les noms des constantes de module sont similaires aux noms des constantes de classe, ils commencent par une majuscule. La définition des méthodes semble également similaire : la définition des méthodes de module est similaire à la définition des méthodes de classe.

Par les méthodes de classe, vous pouvez placer le nom du module et un point avant le nom de la méthode de classe pour appeler la méthode du module, vous pouvez utiliser le nom du module et deux deux-points pour faire référence à une constante.

示例在线

#!/usr/bin/ruby
 
# Module défini dans le fichier trig.rb
 
module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

Nous pouvons définir plusieurs modules avec des noms de fonctions identiques mais des fonctionnalités différentes :

示例在线

#!/usr/bin/ruby
 
# Module défini dans le fichier moral.rb
 
module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

comme les méthodes de classe, lorsque vous définissez une méthode dans un module, vous pouvez spécifier après le nom du module un point, suivi du nom de la méthode.

Ruby require la phrase

requête similaire à C et C++ les instructions include dans les fichiers Ruby et les instructions import dans Java. Si un programme tiers souhaite utiliser tout module défini, il peut simplement utiliser Ruby require la phrase pour charger les fichiers de modules :

la syntaxe

la syntaxe

require filename

Ici, l'extension de fichier .rb n'est pas obligatoire.

示例在线

$LOAD_PATH << '.'
 
require 'trig.rb'
require 'moral'
 
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

Ici, nous utilisons $LOAD_PATH << '.' Faites comprendre à Ruby qu'il doit chercher les fichiers cités dans le répertoire courant. Si vous ne souhaitez pas utiliser $LOAD_PATH, vous pouvez utiliser require_relative pour faire référence à un fichier à partir d'un répertoire relatif.

Remarque :Dans ce cas, les fichiers contiennent des noms de fonctions identiques. Cela peut entraîner un flouage de code lors de l'appel des fonctions, mais les modules évitent ce flouage de code et nous pouvons appeler les fonctions appropriées en utilisant le nom du module.

Ruby include la phrase

Vous pouvez intégrer des modules dans une classe. Pour intégrer un module dans une classe, vous pouvez utiliser include la phrase :

la syntaxe

include modulename

Si le module est défini dans un fichier distinct, il est nécessaire d'utiliser require la phrase fait référence à ce fichier.

示例在线

Supposons que le module suivant soit écrit support.rb dans le fichier.

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

Maintenant, vous pouvez faire référence à ce module dans la classe, comme suit :

示例在线

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

Cela produira le résultat suivant :

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

Mixins en Ruby

Avant de lire cette section, vous devez avoir une compréhension de base des concepts orientés objet.

Lorsqu'une classe peut hériter des caractéristiques de plusieurs classes parentes, cette classe est appelée multitraitement.

Ruby ne prend pas en charge directement le multitraitement, mais le module (Module) de Ruby a une autre fonction merveilleuse. Il élimine presque le besoin de multitraitement, fournissant une fonction nommée mixin de l'appareil.

Ruby ne réalise pas véritablement un mécanisme de multitraitement, mais utilise la technologie mixin comme substitut. Inclure le module dans la définition de la classe, les méthodes du module sont mélangées dans la classe.

让我们看看下面的示例代码,深入了解 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 可以访问所有四个方法,即 a1、a2、b1 和 b2。

因此,您可以看到类 Sample 继承了两个模块,您可以说类 Sample 使用了多重继承或 mixin