2010-04-26 5 views
31

Ich habe viele Beispiele von Ruby-Code mit dieser Zeile (zum Beispiel http://www.sinatrarb.com/) gesehen. Was ist der Zweck davon?erfordern 'Rubygems'

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

In allen Fällen funktioniert der Code ohne diese Zeile.

Antwort

14

Es ist oft überflüssig. Mit dem Befehl gem können Sie jedoch bestimmte Versionen bestimmter Edelsteine ​​anfordern.

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

+0

RubyGems wählt die neueste installierte Version der folgenden Edelsteine ​​aus. Wenn keine solche Software gefunden wird, wird eine Ausnahme generiert. – lkahtz

+0

Warum ist es überflüssig? Es ist der beste Weg, um einen benötigten Edelstein zu laden. –

+2

Eigentlich "require 'rubygems'" lädt keinen benötigten Edelstein, sondern modifiziert nur das Verhalten der "require" -Methode. –

21

require 'rubygems' wird stellen Sie die Ruby-loadpath so dass Sie erfolgreich die Edelsteine ​​benötigen Sie durch rubygems installiert, ohne dass ein LoadError: no such file to load -- sinatra zu bekommen.

Von rubygems-1.3.6 Dokumentation:

Wenn RubyGems erforderlich ist, # Kernel benötigt, ist mit unserem eigenen ersetzt, die von Ladeedelsteinen auf Nachfrage der Lage ist.

Wenn Sie benötigen rufen ‚x‘, das ist, was passiert:

  • Wenn die Datei aus dem bestehenden Ruby-Lastweg geladen werden kann, ist es ist.

  • Sonst werden installierte Edelsteine ​​nach einer Datei durchsucht, die entspricht. Wenn es in Edelstein 'y' gefunden wird, ist dieser Edelstein aktiviert (hinzugefügt, um den Ladepfad).

Die normale erfordern Funktionalität von falschen Rückkehr, wenn diese Datei hat bereits geladen wurde beibehalten.

In der Dokumentation für Kernel#require zu verstehen, warum dies erforderlich ist.

+7

BTW, ich empfehle es nicht. Siehe diesen Beitrag von Ryan Tomayko: http://gist.github.com/54177 –

+1

@Carmine Paolino, in Bezug auf Ihren Kommentar: Sinatra ist ein Juwel. Was ist der beste Weg, um sicherzustellen, dass die Anforderung keinen Fehler verursacht, ohne 'require 'rubygems' zu verwenden? –

+7

In Ruby 1.9 'benötigt "Rubygems"' geschieht automatisch. In früheren Rubys wird Rubygems nicht automatisch benötigt und Sie erhalten den Fehler. Am besten tippen Sie es automatisch ein, es sei denn, Sie sind sicher, dass Sie immer in 1.9+ laufen. Ruby ist es egal, ob du es in 1.9+ zweimal brauchst und dein Code wird in 1.8 glücklich sein. –

11

Als Ergänzung zu vorherigen (und richtigen Antworten): Ruby 1.9 und neueres Schiff mit RubyGems eingebaut, so dass es keinen wirklichen Bedarf an require 'rubygems' gibt. Source here

+1

Sie haben Recht, solange Ruby nicht mit '--disable-rubygems' erstellt wird. – xoryves