Erlang Language
Verhaltensweisen
Suche…
Verhalten verwenden
Fügen Sie Ihrem Modul eine -behaviour
Direktive hinzu, um anzuzeigen, dass es einem Verhalten folgt:
-behaviour(gen_server).
Die amerikanische Schreibweise wird ebenfalls akzeptiert:
-behavior(gen_server).
Der Compiler gibt jetzt eine Warnung aus, wenn Sie vergessen haben, die für das Verhalten erforderlichen Funktionen zu implementieren und zu exportieren, z.
foo.erl:2: Warning: undefined callback function init/1 (behaviour 'gen_server')
Verhalten definieren
Sie können Ihr eigenes Verhalten definieren, indem -callback
in Ihrem Modul -callback
Anweisungen hinzufügen. Wenn zum Beispiel Module, die Ihr Verhalten implementieren, eine foo
Funktion haben müssen, die eine Ganzzahl annimmt und ein Atom zurückgibt:
-module(my_behaviour).
-callback foo(integer()) -> atom().
Wenn Sie dieses Verhalten in einem anderen Modul verwenden, gibt der Compiler eine Warnung aus, wenn foo/1
nicht exportiert wird. Der Dialyzer gibt eine Warnung aus, wenn die Typen nicht korrekt sind. Mit diesem Modul:
-module(bar).
-behaviour(my_behaviour).
-export([foo/1]).
foo([]) ->
{}.
und laufendem dialyzer --src bar.erl my_behaviour.erl
Sie folgende Warnungen:
bar.erl:5: The inferred type for the 1st argument of foo/1 ([]) is not a supertype of integer(), which is expected type for this argument in the callback of the my_behaviour behaviour
bar.erl:5: The inferred return type of foo/1 ({}) has nothing in common with atom(), which is the expected return type for the callback of my_behaviour behaviour
Optionale Rückrufe in einem benutzerdefinierten Verhalten
Standardmäßig muss jede in einer -callback
Direktive in einem Verhaltensmodul angegebene Funktion von einem Modul exportiert werden, das dieses Verhalten implementiert. Andernfalls erhalten Sie eine Compiler-Warnung.
Manchmal möchten Sie, dass eine Rückruffunktion optional ist: Das Verhalten würde sie verwenden, wenn sie vorhanden und exportiert ist, und auf eine Standardimplementierung zurückgreifen. Schreiben -callback
wie üblich die Direktive -callback
und listen Sie dann die Callback-Funktion in einer Direktive -optional_callbacks
:
-callback bar() -> ok.
-optional_callbacks([bar/0]).
Wenn das Modul bar/0
exportiert, überprüft der Dialyzer weiterhin die Typspezifikation. Wenn die Funktion jedoch nicht vorhanden ist, wird keine Compiler-Warnung angezeigt.
In Erlang / OTP selbst, ist dies für die getan format_status
Callback - Funktion in den gen_server
, gen_fsm
und gen_event
Verhaltensweisen.