2010-09-17 15 views
7

Das Include directive wird normalerweise für eine .hrl-Datei am Anfang einer .erl-Datei verwendet.Erlang: Verwenden Sie von der Konsole aus?

Aber ich möchte gerne von der Erlang-Konsole direkt verwenden.

Ich versuche, einige Funktionen in einem Modul zu verwenden. Ich habe die Erl-Datei von der Konsole kompiliert. Aber die Funktionen, die ich verwenden möchte, funktionieren nicht ohne Zugriff auf die hrl-Datei.

Irgendwelche Vorschläge?

+0

Wie meinst du das wirklich? Die Anweisung '-include' ist eine Kompilierungsfunktion. Wenn Sie die Datei erfolgreich kompiliert haben, dann haben alle Funktionen, die "Dinge" aus der Include-Datei benötigen, diese, der Compiler prüft dies. Nach dem Kompilieren funktionieren die Funktionen also ohne Zugriff auf die Include-Datei. Was funktioniert nicht? Welchen Zugang fehlt Ihnen? – rvirding

+0

Ich bin auf der Suche nach Jsonerl, die eine hrl-Datei (http://github.com/lambder/jsonerl) hat. Anstatt eine Datei zu schreiben und dann zu kompilieren, möchte ich die Funktionen im hrl-Feld direkt aus der Shell heraus nutzen. –

Antwort

2

Haben Sie die Option compile:file ausprobiert? Sie können eine Liste der Module übergeben, um so aufgenommen werden:

compile:file("myfile.erl", [{i, "/path/1/"}, {i, "/path/2/"}]) 
+0

Was bedeutet das erste Element des Tupels in der Liste? Ich nehme an, das zweite Element könnte den Pfad der .hrl Datei darstellen ... –

+0

Das Atom 'i', das anzeigt, dass das zweite Element enthalten sein soll. –

+0

danke manoj ... das funktioniert wahrscheinlich. aber für meinen Anwendungsfall scheint es nicht so. Ich versuche, dieses Modul von der Erlang Konsole zu starten http://github.com/lambder/jsonerl –

8

„Aber die Funktionen, die ich ohne Zugriff auf die HRL-Datei nicht funktionieren verwenden möchten.“

Dies kann nicht wahr sein, aber von diesem werde ich versuchen zu erraten, dass Sie auf Datensätze in der hrl Datei zugreifen möchten, die Sie (normalerweise) nicht in der Shell haben.

Wenn Sie rr(MODULE) tun, werden Sie alle in MODULE definierten Datensätze laden (einschließlich derjenigen, die in einer Include-Datei von MODULE enthalten sind).

Dann können Sie alles tun, was Sie von der Shell benötigen.

(Eine andere Sache, die Sie möglicherweise zum Testen wollen kann, ist die Linie -compile(export_all) auf Ihre erl Datei hinzuzufügen. Hässlich, aber gut manchmal zum Testen.)

2

Es lohnt sich nichts, keine Funktionen enthalten jsonerl.hrl hat . Es enthält Makros. Soweit ich weiß, sind Makros in Erlang nur ein kompilierbares Konstrukt.

Die einfachste Möglichkeit, sie verfügbar zu machen, wäre, selbst eine ERL-Datei zu erstellen, die Funktionen deklariert, die im Hinblick auf das Makro implementiert sind. Vielleicht so etwas wie folgt aus:

-module(jsonerl_helpers). 
-include("jsonerl.hrl"). 

record_to_struct_f(RecordName, Record) -> 
    ?record_to_struct(RecordName, Record). 

..., die nach dem Kompilieren, könnten Sie nennen als:

jsonerl_helpers:record_to_struct_f(RecordName, Record) 

Ich weiß nicht, warum der Autor diejenigen, die als Makros zur Implementierung gewählt; es scheint seltsam, aber ich bin sicher, er hatte seine Gründe.

Verwandte Themen