2009-05-11 9 views
3

Dans mon programme Ruby, j'essaye de charger paresseux une bibliothèque (crack pour les curieux).`autoload` déclenche une erreur mais` require` ne fonctionne pas (ruby)

Si je fais ceci:

require 'rubygems' 
require 'crack' 

Tout fonctionne très bien. Cependant, quand j'essaie ceci:

require 'rubygems' 
autoload :Crack, 'crack' 

A ChargeErreur est élevée. (aucun fichier de ce type à charger - crack)

Pourquoi cette erreur est-elle déclenchée? Est-ce parce que 'crack' (et donc mes autres gemmes installées par l'utilisateur) ne sont pas dans mon $ LOAD_PATH?

modifier:

De plus, autoload fonctionne avec la bibliothèque standard:

autoload :Yaml, 'yaml' 

fonctionne très bien, et soulève aucune erreur.

Répondre

5

Vous aurez besoin d'ajouter le joyau de « crack » à votre LOAD_PATH de $ en faisant:

gem 'crack' 

Cela est nécessaire parce que RubyGems remplace le noyau # nécessite une méthode qui tente de « activer » la perle rare avant l'exiger si nécessaire, mais ne fait pas la même chose pour le noyau # charger - et charger automatiquement les appels sur le backend.

+0

Excellent! Merci d'expliquer Kernel # require, aussi! Dois-je placer ceci avant ou après 'require 'rubygems'' ou est-ce important? –

+0

après: la méthode "gem" est ajoutée au noyau par rubygems, donc elle ne sera pas disponible avant que les rubygems ne soient requis. –

Questions connexes