Il metodo 'Richiedi' in Ruby

Primo piano della tastiera

John Lamb/Photographer's Choice RF/Getty Images





Per creare componenti riutilizzabili, che possono essere facilmente utilizzati in altri programmi, un linguaggio di programmazione deve avere un modo per importare senza problemi quel codice in fase di esecuzione. InRubino, il richiedere il metodo viene utilizzato per caricare un altro file ed eseguirlo tutto dichiarazioni . Questo serve per importare tutta la classe e metodo definizioni nel file. Oltre a eseguire semplicemente tutte le istruzioni nel file, il metodo require tiene traccia anche di quali file sono stati precedentemente richiesti e, quindi, non richiederà un file due volte.

Utilizzando il metodo 'richiedi'.

Il metodo require prende il nome del file da richiedere, come a corda , come argomento unico. Questo può essere un percorso del file, ad esempio ./lib/qualche_libreria.rb o un nome abbreviato, come qualche_biblioteca . Se l'argomento è un percorso e un nome file completo, il metodo require cercherà lì il file. Tuttavia, se l'argomento è un nome abbreviato, il metodo require cercherà quel file in un numero di directory predefinite nel sistema. L'uso del nome abbreviato è il modo più comune di utilizzare il metodo require.



L'esempio seguente mostra come utilizzare l'istruzione require. Il file libreria_test.rb è nel primo blocco di codice. Questo file stampa un messaggio e definisce una nuova classe. Il secondo blocco di codice è il file programma_test.rb . Questo file carica il libreria_test.rb file utilizzando il richiedere metodo e ne crea uno nuovo Classe di prova oggetto.

mette 'test_library incluso'
classe TestClass
def inizializzare
inserisce 'oggetto TestClass creato'
fine
fine
#!/usr/bin/env ruby
richiedono 'test_library.rb'
t = TestClass.new

Evita conflitti di nomi

Quando si scrivono componenti riutilizzabili, è meglio non dichiarare molte variabili nell'ambito globale al di fuori di qualsiasi classe o metodo o utilizzando il $ prefisso. Questo per impedire qualcosa chiamato ' inquinamento dello spazio dei nomi .' Se dichiari troppi nomi, un altro programma o libreria potrebbe dichiarare lo stesso nome e causare un conflitto di nomi. Quando due librerie completamente indipendenti iniziano a cambiare le variabili l'una dell'altra accidentalmente, le cose si rompono, apparentemente in modo casuale. Questo è un bug molto difficile da rintracciare ed è meglio evitarlo.



Per evitare conflitti di nomi, puoi racchiudere tutto nella tua libreria all'interno di a modulo dichiarazione. Ciò richiederà alle persone di fare riferimento alle tue classi e al tuo metodo con un nome completo come MyLibrary::my_method , ma ne vale la pena poiché generalmente non si verificano conflitti di nomi. Per le persone che vogliono avere tutti i nomi delle classi e dei metodi nell'ambito globale, possono farlo usando il includere dichiarazione.

L'esempio seguente ripete l'esempio precedente ma racchiude tutto in a La mia biblioteca modulo. Due versioni di mio_programma.rb sono dati; uno che utilizza il includere affermazione e una che non lo fa.

mette 'test_library incluso'
modulo MyLibrary
classe TestClass
def inizializzare
inserisce 'oggetto TestClass creato'
fine
fine
fine
#!/usr/bin/env ruby
richiedono 'test_library2.rb'
t = MyLibrary::TestClass.new
#!/usr/bin/env ruby
richiedono 'test_library2.rb'
includi MyLibrary
t = TestClass.new

Evita i percorsi assoluti

Poiché i componenti riutilizzabili spesso vengono spostati, è anche meglio non utilizzare percorsi assoluti nelle chiamate di richiesta. Un percorso assoluto è un percorso simile /home/utente/codice/libreria.rb . Noterai che il file deve trovarsi in quella posizione esatta per funzionare. Se lo script viene mai spostato o la tua home directory cambia, l'istruzione require smetterà di funzionare.

Invece di percorsi assoluti, è spesso comune creare a ./lib directory nella directory del tuo programma Ruby. Il ./lib viene aggiunta alla directory $LOAD_PATH variabile che memorizza le directory in cui il metodo require ricerca i file Ruby. Dopodiché, se il file mia_libreria.rb è memorizzato nella directory lib, può essere caricato nel tuo programma con un semplice richiedono 'mia_libreria' dichiarazione.



L'esempio seguente è lo stesso del precedente programma_test.rb esempi. Tuttavia, presuppone il libreria_test.rb il file è memorizzato nel ./lib directory e lo carica usando il metodo descritto sopra.

#!/usr/bin/env ruby
$LOAD_PATH<< './lib'
richiedono 'test_library.rb'
t = TestClass.new