Modulo Rubino (modulo)
Modulo (Module) è un modo per i metodi, classi, e le costanti combinato maniera. Modulo (Module) offre due vantaggi.
- I moduli forniscono unospazio dei nomie prevenire conflitti di nomi.
- Modulo implementa dispositivimixin.
Modulo (Module) definisce uno spazio dei nomi, l'equivalente di una sandbox, i metodi e le costanti non sono costanti e metodi di conflitto altrove in esso.
Modulo di classe simile, ma con un look diverso:
- I moduli non possono essere istanziati
- Unità no sottoclassi
- Il modulo può essere definita solo da un altro modulo
grammatica
module Identifier statement1 statement2 ititititit. end
Modulo denominato costanti e le costanti di classe simile nome, che inizia con una lettera maiuscola. definizione del metodo appare come: approccio modulare simile per definire le definizioni dei metodi di classe.
Attraverso i metodi della classe, è possibile inserire il nome del modulo e un punto davanti al nome della classe del metodo da chiamare l'approccio modulare, è possibile utilizzare il nome del modulo e due punti per fare riferimento a una costante.
Esempi
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # it end def Trig.cos(x) # it end end
Possiamo definire funzioni multiple con lo stesso nome ma diversi moduli funzionali:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # it. end end
Come metodi di classe, quando si definisce un metodo in un modulo, è possibile specificare il nome del modulo seguito da un punto dopo punto seguito da il nome del metodo.
Rubinorichiede dichiarazione
richiede dichiarazione è simile a C e C ++, e comprendono dichiarazioni l'istruzione import Java. Se un programma di terze parti che si desidera utilizzare uno dei moduli sono stati definiti, si può semplicemente utilizzareRubyrichiede dichiarazione di caricare file di modulo:
grammatica
require filename
Qui, l'estensione del file non.RB richiesto.
Esempi
$ LOAD_PATH << '.' require 'trig.rb' require 'morali' y = Trig.sin (Trig :: PI / 4) illeciti = Moral.sin (morale :: very_bad)
Qui, usiamo$ LOAD_PATH << '.' Lasciate rubino sapere che dobbiamo cercare il file indicato nella directory corrente.Se non si desidera utilizzare $ LOAD_PATH, è possibile utilizzarerequire_relative fare riferimento a un file da una directory relativa.
Nota: Qui, il file contiene lo stesso nome della funzione.Quindi, questo porterà a confusione quando ci si riferisce al programma chiamante, ma moduli evitare questo offuscamento del codice, e possiamo usare il nome del modulo per chiamare la funzione appropriata.
Rubinoistruzione include
È possibile incorporare un modulo in una classe. Al fine di incorporare nel modulo di classe, è possibile utilizzareincluderedichiarazioni nella tua classe:
grammatica
include modulename
Se il modulo è definito in un file separato, quindi prima è necessario utilizzare il modulo incorporatirichiedonodichiarazioni fanno riferimento al file.
Esempi
Assumendo i seguenti moduli scritti in file disupport.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
A questo punto è possibile fare riferimento al modulo nella classe, nel modo seguente:
#!/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
Questo produce i seguenti risultati:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Ruby in Mixin
Prima di leggere questa sezione, avrete bisogno di una comprensione preliminare dei concetti orientati agli oggetti.
Quando una classe può essere più di una classe genitore quando la classe di entità eredita dalla, la classe viene visualizzato come l'ereditarietà multipla.
Ruby non supporta direttamente l'ereditarietà multipla, ma il modulo di Ruby (Module) ha un altro caratteristiche fantastiche. Si elimina virtualmente la necessità di ereditarietà multipla, è previstounapparecchio denominatomixin.
Rubino in realtà non raggiungere meccanismo di ereditarietà multipla, ma ha adottato la tecnologia mixin come sostituto. I moduli comprendono la definizione della classe, l'approccio del modulo di mescolare nella classe.
Diamo un'occhiata al seguente codice di esempio, una comprensione approfondita di 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
- Un modulo è composto dal processo di a1 e a2.
- Modulo B con il metodo della composizione b1 e b2.
- classe di esempio contiene i moduli A e B.
- Classe del campione può accedere a tutti i quattro metodi, cioè, a1, a2, b1 e b2. Così si può vedere che il campione classe eredita due moduli, si può dire che il campione di classe usare l'ereditarietà multipla omixin.