2011-11-14 13 views
16

Ho un file di codice Ruby (somelogic.rb) che contiene diversi metodi e classi, situati in dire,/home/utente/codice. Ora sto scrivendo un'altra classe nella stessa directory e vorrei fare riferimento ai metodi e alle classi in somelogic.rb. Come lo faccio? Apprezzo molto qualsiasi input.Come fare riferimento a un metodo in un altro file di codice Ruby?

+1

richiedere 'somelogic' –

risposta

20

Se si utilizza Ruby 1.9 o versione successiva, questo è il modo più semplice per farlo:

require_relative 'somelogic' 

Se si desidera che il codice per lavorare in 1,9 anni e più versioni di Ruby, si dovrebbe fare questo, invece:

require File.join File.dirname(__FILE__), 'somelogic' 

Qualsiasi riga si scelga, si dovrebbe mettere nella parte superiore del file rubino. Quindi qualsiasi classe, modulo o variabile globale definita in somelogic.rb sarà disponibile per il tuo programma.

0

Nel secondo file (diciamo otherlogic.rb) scrivere require '/home/user/code/somelogic.rb' in prima linea.

+3

Per favore, non farlo. Il tuo codice non sarà per niente portatile. – mliebelt

+0

So che ero solo sicuro che il file sarebbe stato incluso (1.9.2 ha qualche problema con 'require'). Se ti trovi nella stessa directory devi solo richiedere 'otherlogic.rb' –

9

Ecco lo scenario:

/home/user/code/somelogic.rb 
class MyMath 
    def self.sin(number) 
    ... 
    end 
end 

si desidera utilizzare i metodi sin nel tuo altro file mylogic.rb.

A seconda della versione di Ruby, effettuare una delle seguenti operazioni:

Ruby 1.8.x 
require "somelogic" 
class OtherThings 
    def some_method 
    MyMath.sin(42) 
    end 
end 

L'uso modello è per tutte le versioni rubino lo stesso, ma la dichiarazione richiedono potrebbe essere diverso.

Ruby 1.9.x 
require_relative "somelogic" 

o variazione

Ruby 1.9.x 
require "./somelogic" 

La prima variazione lavora tutto il tempo, il secondo solo se si chiama ruby mylogic.rb nella directory in cui si trovano mylogic.rb e somelogic.rb.

Se si desidera caricare i file da quella directory da un punto di partenza si trova in un'altra directory, è necessario utilizzare:

Ruby 1.8.x and Ruby 1.9.x 
$: << File.dirname(__FILE__) 

Questo espande il percorso di carico di Ruby. Legge il percorso (relativo) di __FILE__, ottiene la sua directory e aggiunge il percorso (assoluto) di tale directory al percorso di caricamento. Quindi, quando si effettua la ricerca tramite require, i file verranno trovati.

+5

C'è una differenza importante tra 'require './Somelogic'' e' require_relative' somelogic''. Quest'ultimo cerca un file * relativo allo script stesso *, mentre il primo cerca nella directory di lavoro corrente. Immagina di trovarci in una directory chiamata "progetto" e lanciamo il programma Ruby "scripts/do_the_thing.rb". Se "do_the_thing.rb" usa 'require_relative', cercherà" project/scripts/somelogic.rb ". D'altra parte, se avessimo scritto 'require './Somelogic'', cercherebbe" project/somelogic.rb ". – Chuck

+0

Buon punto, lo aggiungerò alla risposta. Molte grazie! – mliebelt

+0

Aggiungendo a ciò che ha detto Chuck, è brutto fare 'require'./Somelogic'' perché questo fa un riassunto sull'attuale directory di lavoro dell'interprete ruby, quindi rende difficile riutilizzare il codice in altri progetti. –

Problemi correlati