Erlang:Shell在生成后没有返回

时间:2014-02-11 17:56:43

标签: shell erlang spawn

-module(core_profile).

-export([start/0]).

start() ->
    register(eProfile, spawn(loop())),
    ok.

loop() ->
    receive
            {Key, Pid} -> Pid ! getKey();
            {name, Pid} -> Pid ! getName();
            {address, Pid} -> Pid ! getAddress()
    end,
    loop().

这是我的代码

当我尝试从shell开始循环时,我卡住了。

2> Pid = spawn(fun()-> a end).     
<0.39.0>
3>c(core_profile.erl).
{ok, core_profile}
4>core_profile:start().

该命令不应该返回ok然后给我下一个命令行,而不是什么都不做?

2 个答案:

答案 0 :(得分:4)

执行spawn(loop())时,调用loop函数来评估结果(将传递给spawn,因此您将进入无限循环。

不是调用函数,而是必须通过spawn(fun loop/0)传递函数引用。

答案 1 :(得分:0)

spawn(Fun) -> pid()

类型: Fun = function()

将Fun应用程序启动的新进程的pid返回到空列表[]。

你应该写register(eProfile, spawn( fun()-> loop() end)),