2014-02-11 196 views
2
-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然後給我下一個命令行,而不是什麼都不做?

+0

這段代碼的另一個問題 - '{重點,PID} - > PID! getKey()'必須是最後一個模式,它比其他模式更普遍,並且也會匹配這些模式。 – johlo

+0

是的,複製錯誤。應該是pKey – H4kor

回答

3

當你做spawn(loop())loop函數被調用,以評估結果(這將轉嫁到spawn,讓你進入無限循環。

而不是調用的函數,你必須通過做功能參考。spawn(fun loop/0)

+0

感謝您的幫助。安靜的新來erlang – H4kor

0
spawn(Fun) -> pid() 

類型: 樂趣=()函數

返回一個新的進程由applicati開始PID樂趣到空列表[]。

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