2009-05-11 9 views
3

In meinem Ruby-Programm versuche ich eine Bibliothek zu laden (crack für Neugierige).`autoload` löst einen Fehler aus, aber` require` nicht (ruby)

Wenn ich dies tun:

require 'rubygems' 
require 'crack' 

Alles funktioniert gut. Wenn ich dies jedoch versuche:

require 'rubygems' 
autoload :Crack, 'crack' 

Ein LoadError wird ausgelöst. (keine solche Datei zu laden - Crack)

Warum wird dieser Fehler ausgelöst? Liegt es daran, dass "crack" (und damit meine anderen von Nutzern installierten Edelsteine) nicht in meinem $ LOAD_PATH enthalten sind?

edit:

Außerdem autoload funktioniert mit der Standardbibliothek:

autoload :Yaml, 'yaml' 

funktioniert gut, und erhebt keinen Fehler.

Antwort

5

Sie müssen das ‚Crack‘ Juwel zu Ihrem $ LOAD_PATH hinzufügen, indem Sie:

gem 'crack' 

Dies ist notwendig, weil RubyGems ersetzt Kernel # mit einem Verfahren erfordern, die versucht, zu „aktivieren“, um das Juwel vor erfordert es bei Bedarf, aber nicht das gleiche für Kernel # laden - und Autoload-Aufrufe laden auf dem Back-End.

+0

Ausgezeichnet! Danke für die Erklärung von Kernel #, auch! Muss ich das vor oder nach "require" Rubygems platzieren oder spielt es eine Rolle? –

+0

nachher: ​​die "gem" -Methode wird von rubygems zum Kernel hinzugefügt, sie wird also erst verfügbar sein, wenn Rubygems benötigt werden. –

Verwandte Themen