Impossible d'inclure une Classe à une autre classe en Ruby: uninitialized constant (NameError)
Permet de dire que j'ai trois classs, de définir chacun dans son propre fichier. par exemple, ClassA dans ClassA.rb etc...
class ClassA
def initialize
end
def printClassA
puts "This is class A"
end
end
class ClassB
def initialize
end
def printClassB
puts "This is class B"
end
end
class ClassC
def initialize
end
def bothClasses
a = ClassA.new
b = ClassB.new
a.printClassA
b.printClassB
end
end
Comme vous pouvez le voir, ClassC besoins des deux autres classes afin de fonctionner correctement. Je suppose, il doit y avoir un moyen d'importer/include/charger les deux autres classes dans ClassC.
Je suis nouveau sur Ruby et j'ai essayé de chaque permutation de charge/include/require et je ne peux pas comprendre comment obtenir ce à exécuter.
Normalement, je viens d'obtenir:
classc.rb:2:in `<class:ClassC>': uninitialized constant ClassC::ClassA (NameError)
from classc.rb:1:in `<main>'
Ou une erreur de syntaxe avec mon import/include/require consolidés.
À l'aide de Windows 7, Ruby 1.9.2, RadRails, tous les fichiers sont dans le même projet et le dossier source.
Je suis désolé si cette question est similaire à d'autres questions ici, mais la plupart des réponses à la résolution de la "uninitialized constant" est à "seulement besoin de le fichier". J'ai essayé et cela ne fonctionne pas.
OriginalL'auteur user604886 | 2011-02-06
Vous devez vous connecter pour publier un commentaire.
Je pense que votre problème est que
$:
, la variable qui détermine l'endroit oùrequire
recherche des fichiers, qui ne comprend plus le répertoire courant en Ruby 1.9.2 et plus (pour des raisons de sécurité). Dire Ruby où trouver le fichier que vous devez faire:OriginalL'auteur Chuck
Si je garde tout dans un seul fichier et ajouter deux lignes de code, il fonctionne très bien sur 1.9.2:
Qui me dit que le code est bon, le problème est dans votre inclusion des fichiers.
J'ai divisé les deux premières classes dans des fichiers séparés, "classa.rb" et "classb.rb", respectivement, ensuite modifié le fichier:
Après l'exécution, j'ai eu les mêmes résultats montrant couru correctement.
J'utilise". /chemin/vers/fichier " parce que c'est l'auto-documentation où je suis à la recherche, mais 'chemin/vers/fichier", ou, dans ce cas, 'classa' marcherait aussi bien.
Ensuite, je suis passé à Ruby 1.8.7, et changé le
require_relative
lignes derequire
, et enregistré le fichier à nouveau. Exécuter à partir de la ligne de commande a fonctionné correctement de nouveau:Pour des raisons de sécurité, Ruby 1.9+ supprimé le répertoire courant '.' partir de la liste des répertoires recherché par
require
. Parce qu'ils savaient que nous avions de les chasser vers le bas avec des fourches et des torches, ils ont ajouté larequire_relative
de commande, qui permet la recherche dans le répertoire courant et ci-dessous.Essayez de lire la réponse maintenant. J'ai terminé l'édition.
OriginalL'auteur the Tin Man