当我开始关注OTP时,基本上有三种行为,gen_server,FSM,事件, 但是有一个inets应用程序的例子,我看到它定义了一个自定义的行为 -behavior(inets_service)。那么用户如何定义自定义行为,以及它可以为您做什么?
答案 0 :(得分:4)
自定义行为允许您指定合同。此契约由实现该行为的模块中必须存在的函数名称/ arities列表给出。确保您声明所有功能基本上只是方便。
例如,您可以定义一个具有gen_server
行为的模块,然后从中省略handle_info/2
函数。然后行为检查会因为您缺少合同的一部分而错误。
这就是它的全部!为了实现它们,我们在行为定义模块behavior_info/1
中定义了一个特殊函数,它告诉Erlang系统行为。
inets
定义了inets_service
行为,因为它可以作为inets
系统插件的合约。
答案 1 :(得分:0)
牛仔演示
-module(cowboy_middleware).
-type env() :: [{atom(), any()}].
-export_type([env/0]).
-callback execute(Req, Env)
-> {ok, Req, Env}
| {suspend, module(), atom(), [any()]}
| {halt, Req}
| {error, cowboy:http_status(), Req}
when Req::cowboy_req:req(), Env::env().
erlang使用-callback自定义行为。