Erlang 回调是否只能通过 MFA 函数(apply/3、spawn/3、...)调用?(自定义行为 HOWTO)

网络公民1

这是我的怀疑,因为这个简单的代码

-module(simple_server).
-export( [sayHello/0] ).

-callback say(Num :: term()) -> term().

sayHello() ->
    io:fwrite( "Hello 1: ~p\n", [ say(1) ]) ,
    io:fwrite( "Hello 2: ~p\n", [ say(2) ]) .

编译失败:

$ erlc simple_server.erl
simple_server.erl:7: function say/1 undefined
simple_server.erl:8: function say/1 undefined

如果是这种情况,那么在其他地方没有明确评论:官方文档“学习erlang”这个答案

莱戈夏

您需要提供回调模块的名称,这可以通过apply完成spawn,但您也可以使用变量作为模块名称进行简单调用,例如CallbackModule:say(1).

所以你可以这样做:

sayHello(CallbackModule) ->
    io:fwrite( "Hello 1: ~p\n", [ CallbackModule:say(1) ]) ,
    io:fwrite( "Hello 2: ~p\n", [ CallbackModule:say(2) ]) .

或者

sayHello(CallbackModule) ->
    io:fwrite( "Hello 1: ~p\n", [ apply(CallbackModule, say, [1]) ]) ,
    io:fwrite( "Hello 2: ~p\n", [ apply(CallbackModule, say, [2]) ]) .

这两个版本是等价的。

让我们创建一个实现simple_server行为的回调模块

-module(my_callback).
-behaviour(simple_server).
-export([say/1]).

say(N) ->
    {N, is, the, loneliest, number}.

现在我们可以simple_server:sayHello使用模块名称作为参数调用:

> simple_server:sayHello(my_callback).
Hello 1: {1,is,the,loneliest,number}
Hello 2: {2,is,the,loneliest,number}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以为自定义类型覆盖len函数的行为?

来自分类Dev

调试挂在Erlang中的函数调用

来自分类Dev

外部函数调用Erlang

来自分类Dev

自定义javascript函数/ jQuery回调的正确语法

来自分类Dev

检查变量是否为Erlang中的自定义类型?

来自分类Dev

使用自定义数据作为函数参数调用lua回调

来自分类Dev

是否使用成员函数作为构造函数的未定义行为的参数?

来自分类Dev

用Erlang编写和编译自定义行为

来自分类Dev

扩展自定义行为

来自分类Dev

JavaScript:自定义回调函数

来自分类Dev

使用jQuery回调参数通过AJAX调用PHP函数

来自分类Dev

通过自定义回调函数的Woocommerce订单

来自分类Dev

在回调函数中使用自定义钩子

来自分类Dev

通过函数防护了解Erlang Basic递归

来自分类Dev

Quickblox:自定义模块-自定义回调函数,而不是默认的“ completedWithResult”

来自分类Dev

如何设置Sublime Text 3鼠标事件以触发自定义行为和默认行为?

来自分类Dev

Ajax可自定义的错误回调函数

来自分类Dev

内部列表Erlang的自定义串联

来自分类Dev

jQuery函数自定义加扰回调

来自分类Dev

递归函数调用挂起,Erlang

来自分类Dev

Erlang:运行自定义模块

来自分类Dev

扩展自定义行为

来自分类Dev

CakePHP 3:如何创建自定义模型回调?

来自分类Dev

使用jQuery回调参数通过AJAX调用PHP函数

来自分类Dev

通过网址在joomla插件中调用自定义函数。

来自分类Dev

可以通过外部调用中断函数/回调执行吗?

来自分类Dev

Passport JS 自定义回调调用 3 次

来自分类Dev

Javascript 自定义回调函数

来自分类Dev

是否可以添加自定义输入并使用 ScriptTag 调用 3rd 方 API?

Related 相关文章

热门标签

归档