Erlang Language
행동
수색…
비헤이비어 사용
모듈에 -behaviour
지시문을 추가하여 -behaviour
을 나타냅니다.
-behaviour(gen_server).
미국식 철자법도 허용됩니다.
-behavior(gen_server).
이제 컴파일러는 동작에 필요한 함수를 구현하고 내보내는 것을 잊어 버린 경우 경고를 표시합니다. 예 :
foo.erl:2: Warning: undefined callback function init/1 (behaviour 'gen_server')
비헤이비어 정의
모듈에 -callback
지시문을 추가하여 자신의 동작을 정의 할 수 있습니다. 예를 들어, 당신의 행동을 구현하는 모듈이 정수를 취하고 원자를 반환하는 foo
함수를 가질 필요가 있다면 :
-module(my_behaviour).
-callback foo(integer()) -> atom().
다른 모듈에서이 동작을 사용하면 foo/1
내보내지 않으면 컴파일러에서 경고하고 형식이 올바르지 않으면 Dialyzer가 경고합니다. 이 모듈로 :
-module(bar).
-behaviour(my_behaviour).
-export([foo/1]).
foo([]) ->
{}.
dialyzer --src bar.erl my_behaviour.erl
실행하면 다음과 같은 경고 메시지가 나타납니다.
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
사용자 정의 비헤이비어의 선택적 콜백
기본적으로 비헤이비어 모듈의 -callback
지시문에 지정된 함수는 해당 비헤이비어를 구현하는 모듈에서 내 보내야합니다. 그렇지 않으면 컴파일러 경고가 표시됩니다.
경우에 따라 콜백 함수를 선택적으로 사용하려는 경우가 있습니다.이 경우 비헤이비어가있는 경우 해당 비헤이비어를 사용하고 내 보낸 다음 기본 구현을 사용합니다. 그렇게하려면 쓰기 -callback
평소와 같이 지시를 한 다음에 콜백 함수를 나열 -optional_callbacks
지침 :
-callback bar() -> ok.
-optional_callbacks([bar/0]).
모듈이 bar/0
을 내 보내면 Dialyzer는 유형 스펙을 계속 확인하지만 함수가 없으면 컴파일러 경고를 얻지 못합니다.
Erlang / OTP 자체에서는 gen_server
, gen_fsm
및 gen_event
비헤이비어의 format_status
콜백 함수에 대해 수행됩니다.