簡體   English   中英

Erlang:生成后Shell不返回

[英]Erlang: Shell not returning after 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().

這是我的代碼

當我嘗試從外殼啟動循環時,我被卡住了。

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

命令不應該返回OK,然后再給我下一個命令行,而不是什么也不做嗎?

當您執行spawn(loop())將調用loop函數以評估結果(該結果將傳遞給spawn ,因此您將進入無限循環。

代替調用函數,您必須通過執行spawn(fun loop/0)傳遞函數引用。

spawn(Fun) -> pid()

類型:Fun = function()

將由Fun應用程序啟動的新進程的pid返回到空列表[]。

您應該編寫register(eProfile, spawn( fun()-> loop() end)),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM