English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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.
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 :
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.
Vous pouvez intégrer des modules dans une classe. Pour intégrer un module dans une classe, vous pouvez utiliser include la phrase :
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
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 。