2017-03-02 83 views
1

我产生了利用两种方式灵药的过程:产卵的过程中灵药

defmodule Second do 
    def called do 
    raise "oops" 
    end 

end 

spawn(Second.called) 
** (RuntimeError) oops 
second.exs:3: Second.called/0 

spawn(Second,:called,[]) 
#PID<0.89.0> 
iex(2)> 17:42:40.999 [error] Process #PID<0.89.0> raised an exception 
** (RuntimeError) oops 

是什么在这两种方法的区别?为什么只有第二个返回进程ID而不是第一个?谢谢

回答

2

在第一个例子中,代码在得到实际的spawn之前爆炸了。我想象你想要做的是spawn(&Second.called/0),它将返回与第二个例子相同的错误。

3

在第一个中,您直接调用Second.called,并且提高,因此spawn永远不会被调用。第二个版本将调用spawn,新进程将调用Second.called,而不会引发随后引发的参数。