2011-11-14 11 views
16

Tengo un archivo de código Ruby (somelogic.rb) que contiene varios métodos y clases, ubicados en, por ejemplo,/home/usuario/código. Ahora estoy escribiendo otra clase en el mismo directorio y me gustaría hacer referencia a los métodos y clases en somelogic.rb. ¿Cómo puedo hacer eso? Agradezco mucho cualquier aporte.¿Cómo hacer referencia a un método en otro archivo de código Ruby?

+1

requieren 'somelogic' –

Respuesta

20

Si está usando Ruby 1.9 o posterior, esta es la forma más sencilla de hacerlo:

require_relative 'somelogic' 

Si desea que su código funcione en 1.9 y versiones anteriores de Ruby, usted debe hacer esto en su lugar:

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

Cualquiera que sea la línea que elija, debe ponerla en la parte superior de su archivo ruby. Entonces cualquier clase, módulo o variable global definida en somelogic.rb estará disponible para su programa.

0

En segundo archivo (por ejemplo otherlogic.rb) escribir requerir '/home/user/code/somelogic.rb' en la primera línea.

+3

Por favor, no hagas eso. Tu código no será portátil en absoluto. – mliebelt

+0

Sé que solo estaba seguro de que el archivo se incluiría (1.9.2 tiene algún problema con 'require'). Si está en el mismo directorio, simplemente necesitará 'otherlogic.rb' –

9

Aquí está el panorama:

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

que desea utilizar los métodos sin en su otro archivo mylogic.rb.

Dependiendo de la versión de rubí, lleve a cabo uno lo siguiente:

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

El uso es para todas las versiones de rubí la misma, pero la declaración requerir puede ser diferente.

Ruby 1.9.x 
require_relative "somelogic" 

o variación

Ruby 1.9.x 
require "./somelogic" 

La primera variación funciona todo el tiempo, el segundo sólo si se llama ruby mylogic.rb en el directorio donde se encuentran mylogic.rb y somelogic.rb.

Si desea cargar los archivos de ese directorio desde un punto de partida se encuentra en otro directorio, debe utilizar:

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

Esto expande el camino de carga de Ruby. Lee la ruta (relativa) de __FILE__, obtiene su directorio y agrega la ruta (absoluta) de ese directorio a su ruta de carga. Entonces al hacer luego la búsqueda por require, se encontrarán los archivos.

+5

. Hay una diferencia importante entre 'require './Somelogic'' y' require_relative' somelogic''. Este último busca un archivo * relativo al guión en sí *, mientras que el primero se ve en el directorio de trabajo actual. Imagine que estamos en un directorio llamado "proyecto" y ejecutamos el programa Ruby "scripts/do_the_thing.rb". Si "do_the_thing.rb" usa 'require_relative', buscará" project/scripts/somelogic.rb ". Por otro lado, si hubiéramos escrito 'require './Somelogic'', buscaría" project/somelogic.rb ". – Chuck

+0

Buen punto, lo agregaré a la respuesta. ¡Muchas gracias! – mliebelt

+0

Agregando a lo que dijo Chuck, es malo hacer 'require './Somelogic'' porque eso hace una asunción sobre el directorio de trabajo actual del intérprete de ruby, por lo que hace que sea difícil volver a usar el código en otros proyectos. –

Cuestiones relacionadas