2010-04-26 12 views
31

He visto muchas muestras de código Ruby con esta línea (por ejemplo, http://www.sinatrarb.com/). ¿Cuál es el propósito de esto?requieren 'rubygems'

# require 'rubygems' 
require 'sinatra' 
get '/hi' do 
    "Hello world!" 
end 

En todos los casos, el código funciona sin esta línea.

Respuesta

14

A menudo es superfluo. Sin embargo, le permitirá requerir versiones específicas de gemas particulares con el comando gem.

http://guides.rubygems.org/patterns/#requiring_rubygems

+0

RubyGems seleccionará la última versión instalada de las gemas siguientes. Si no se encuentra dicho software, se genera una excepción. – lkahtz

+0

¿Por qué es superfluo? Es la mejor manera de cargar una gema necesaria. –

+2

En realidad, "require 'rubygems'" no carga una gema necesaria, solo modifica el comportamiento del método "require". –

21

require 'rubygems' ajustará el rubí loadpath lo que le permite solicitar con éxito las gemas instaladas a través rubygems, sin conseguir un LoadError: no such file to load -- sinatra.

De la documentación rubygems-1.3.6:

Cuando se requiere RubyGems, Kernel # requieren se sustituye con nuestra propia que es capaz de gemas de carga en la demanda.

Cuando se llama a requerir 'x', esto es lo que sucede:

  • Si el archivo se puede cargar desde el LOADPATH Rubí existente, es .

  • De lo contrario, las gemas instaladas se buscan para un archivo que coincide con . Si se encuentra en gem 'y', esa gema se activa (agregada al loadpath).

El normales requieren funcionalidad de devolver false si ese archivo ya ha sido cargado se conserva.

Consulte la documentación para Kernel#require para comprender por qué es necesario.

+7

Por cierto, no lo recomiendo. Ver esta publicación de Ryan Tomayko: http://gist.github.com/54177 –

+1

@ Carmine Paolino, con respecto a su comentario: Sinatra es una joya. ¿Cuál es la mejor manera de asegurarse de que requerirlo no produzca un error sin usar rubygems 'require '? –

+7

En Ruby 1.9 'require "rubygems' 'pasa automáticamente. En rubies anteriores rubies no se requiere automáticamente y obtendrá el error. Su mejor opción es escribirlo automáticamente a menos que esté seguro de que se está ejecutando siempre en 1.9+. A Ruby no le importará si lo requiere dos veces en 1.9+ y su código estará contento en 1.8.whatever. –

11

Además de las respuestas anteriores (y correctas): Ruby 1.9 y el barco más nuevo con RubyGems incorporado, por lo que no es necesario require 'rubygems'. Source here

+1

Tienes razón, siempre y cuando ruby ​​no se compile con '--disable-rubygems'. – xoryves