2014-02-11 61 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)),