我有这些代码
start() ->
spawn(?MODULE, init, [self()]).
init(From) ->
spawn(?MODULE, broadcast, []).
broadcast() ->
Msg = "helloworld",
timer:sleep(10000),
broadcast().
Run Code Online (Sandbox Code Playgroud)
当我在Erlang shell中测试这些代码时,它给我undef错误,我需要导出播放功能,我只是拒绝
码
spawn(?MODULE, init, [self()]).
Run Code Online (Sandbox Code Playgroud)
意味着你将产生初始调用将是?MODULE:init(self())或更准确等效的进程apply(?MODULE,init,[self()]).?MODULE是宏评估当前模块名称,但无论如何它是外部函数调用所以即使?MODULE使用该函数也必须导出.相对的
spawn(fun() -> init(self()) end).
Run Code Online (Sandbox Code Playgroud)
产生初始调用func fun() -> init(self()) end调用init/1函数的结果self().这是本地电话,意味着init/1可能无法导出.self()在新进程中执行时还有另一个问题,因此您必须编写
Self = self(), spawn(fun() -> init(Self) end).
Run Code Online (Sandbox Code Playgroud)
实现与在spawn(?MODULE, init, [self()])哪里self()被评估为参数的相同效果spawn/3.
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |