2016-03-18 19 views
1

Ich gehe durch Erlang-Code.Erlang: include Modul und Anruffunktionen

Der obige Code ist in einem Modul namens Sample.erl enthalten.

Ich bin neu in dieser Sprache. Meine Frage ist, dass ich keine Include-Anweisung für das Modul tes_lib in Sample.erl sehen kann. Also, wie kann Sample.erl die Funktion check_operational mit tes_lib Modul aufrufen?

Ich dachte, dass es wie Java sein sollte, wo wir zuerst die Klasse importieren und dann die Funktion aufrufen.

Antwort

4

In Erlang müssen Sie keine Module "importieren", um sie aufrufen zu können. Ein Anruf wie tes_lib:check_operational(Config) wird zur Laufzeit aufgelöst. Wenn das Modul tes_lib noch nicht geladen wurde, sucht der Code-Server im Ladepfad danach. Wenn das Modul nicht gefunden werden kann, schlägt der Aufruf mit einem Fehler undef fehl.


Es ist eine -import Richtlinie in Erlang, aber es ist in der Regel schlechten Stil zu verwenden, um es in Betracht gezogen. Man könnte schreiben:

-import(tes_lib, [check_operational/1]). 

und dann check_operational nennen, als ob es sich um eine lokale Funktion waren, ohne den Namen des Moduls angeben. Diese Funktionsaufrufe werden bei der Kompilierung durch vollständig qualifizierte Aufrufe ersetzt.

Vom Erlang Programming Rules:

nicht -import Verwenden Sie, indem sie den Code schwerer zu lesen macht, da Sie nicht direkt in welchem ​​Modul eine Funktion definiert ist, sehen. Verwenden Sie exref (Cross Reference Tool), um Modulabhängigkeiten zu finden.