erlang的spawn函数
erlang吧
全部回复
仅看楼主
level 11
alanxiong2003 楼主
1. spawn(fun() -> loop() end).
2. spawn(loop()).
语句1和2到底有什么区别? 2会阻塞,1不会, spawn到底是怎么执行的?? 过程能否说详细点.
loop() ->
receive
    ok -> ok, loop();
    stop -> stop
end.
2010年09月14日 10点09分 1
level 5
这是因为erlang允许fun为函数参数,而不是允许函数本身为函数参数
2011年03月14日 07点03分 2
level 1
我也碰到这个问题,搜索到这个帖子,但2楼也没解释好。我找到原因了,写清楚一点,让以后的网友知道。
要用: spawn(fun loop/0 end). 的形式才行。如果写 loop() ,机器会认为是:“loop()的返回值”,而不是一个函数名。
等下,这又有个问题:如果loop函数是要有参数的函数,loop/1 显然也没法写参数,不能成功。所以spawn函数里写 fun() -> ff(X,Y,Z) end. 这形式是个好习惯。
2013年01月19日 05点01分 3
嗯,spawn也有 spawn/1 spawn/2 spawn/3 spawn/4, 不过我不想记太多。
2013年01月19日 06点01分
level 9
飘过一下,能问问楼主一般用Erlang来干什么?很想知道。
2013年01月19日 14点01分 4
level 1
erlang里面一切都是表达式,表达式肯定会有个计算结果,你表达式本身就阻塞了,调用它的就一直等着他返回结果,再spawn,而用fun的话直接返回#fun<>,并发一个进程出去等着表达式返回结果。明白这个道理就好了
2013年03月27日 19点03分 5
[花心] 这个最好理解
2014年11月19日 02点11分
1