如何在Erlang中定义自定义行为以及它能为您做些什么?

时间:2011-06-27 02:03:55

标签: erlang

当我开始关注OTP时,基本上有三种行为,gen_server,FSM,事件, 但是有一个inets应用程序的例子,我看到它定义了一个自定义的行为 -behavior(inets_service)。那么用户如何定义自定义行为,以及它可以为您做什么?

2 个答案:

答案 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自定义行为。