L'Inclure La directive est généralement utilisée pour un fichier .hrl en haut d'un fichier .erl. p>
Mais j'aimerais utiliser directement la console Erlang. P>
J'essaie d'utiliser certaines fonctions dans un module. J'ai compilé le fichier ERL de la console. Mais les fonctions que je veux utiliser ne fonctionnent pas sans accès au fichier HRL. P>
Toute suggestion? P>
3 Réponses :
Avez-vous essayé le compile: fichier code>
option? Vous pouvez transmettre une liste de modules à inclure ainsi:
compile:file("myfile.erl", [{i, "/path/1/"}, {i, "/path/2/"}])
Qu'est-ce que le premier élément du tuple dans la liste représente .. i? Je suppose que le deuxième élément pourrait représenter le chemin du fichier .hrl ...
L'atome i code> indique que le deuxième élément doit être inclus.
Merci Manoj ... cela fonctionne probablement. Mais pour mon cas d'utilisation, cela ne semble pas. J'essaie d'exécuter ce module de la console Erlang Github.com/Lambder/jsonerl
Pouvez-vous poster un exemple de code? Un petit extrait qui utilise la HRL et je vais essayer de voir si je peux le faire fonctionner ici.
Je fais un clone du projet (avec Sudo Git Clone), puis dans le dossier, commencez ERL en tant que root. Ensuite, en première ligne, je le fais (compilez: fichier ("jSonerl.erl", [{i, "jSonerl.hrl"}]. Je reçois un message ok. alors je fais rd (artiste, artiste, {Nom, Annon_of_birth, Ville, photo, films}). Cela crée l'enregistrement et fonctionne. Je crée l'artiste variable comme dans les documents du projet. Maintenant, je fais une variable: JSON = JSeNerl: record_to_json (artiste, artiste). C'est quand je reçois une erreur.
@Ted: jSonerl.erl code> ne définit pas
record_to_json code>. Naturellement, cela donnera une erreur.
@Manoj: Oui, vous avez absolument raison. Par conséquent, l'effort d'obtention de jsonerl.hrl (qui définit record_to_json) compilé et accessible ...
"Mais, les fonctions que je veux utiliser ne fonctionnent pas sans accès au fichier HRL." P>
Cela ne peut pas être vrai, mais à partir de là, je vais prendre une photo à deviner que vous souhaitez avoir accès à des enregistrements dans le fichier Si vous faites Ensuite, vous pouvez faire tout ce dont vous avez besoin à partir de la coquille. P>
(une autre chose que vous pourriez éventuellement vouloir que le test soit pour ajouter la ligne hrl code> que vous n'avez pas (normalement) dans la coquille . p>
rr (module) code> Vous chargez tous les enregistrements définis dans le module code> (y compris ceux définis dans un fichier incluant inclus par
Module code> ). p>
-Compile (export_all) code> à votre fichier
erl code>. moche, mais bon parfois pour tester.) p>
Cela ne vaut rien que JSEERL.HRL ne contient aucune fonction. Il contient des macros. Pour autant que je sache, les macros sont une construction de compilation à erlang.
Le moyen le plus simple de les rendre disponibles serait de créer vous-même un fichier .erl vous-même qui déclare réellement des fonctions mises en œuvre en termes de macro. Peut-être quelque chose comme ceci: p> ... lequel, après avoir compilé, vous pouvez appeler comme: p> i Je ne sais pas pourquoi l'auteur a choisi de mettre en œuvre ceux comme macros; Cela semble étrange, mais je suis sûr qu'il avait ses raisons. p> p>
Comment voulez-vous vraiment dire? La directive
-include code> est une fonctionnalité de compilétime. Si vous avez compilé avec succès le fichier, des fonctions qui nécessitent des "choses" dans le fichier include les auront, le compilateur vérifie ceci. Ainsi, après la compilation, les fonctions fonctionnent sans accès au fichier incluant. Qu'est-ce que cela ne fonctionne pas? Quel accès est-ce que vous manquez?
Je cherche à installer JSeerl, qui a un fichier HRL ( Github.com/Lambder/jsonerl ). Au lieu d'écrire un fichier, puis de la compiler, j'aimerais utiliser les fonctions de HRL Fiel directement à partir de la coque.