在长生不老药中产生一个过程

时间:2017-03-02 12:30:28

标签: elixir spawn

我用两种方式在灵药中产生了一个过程:

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 个答案:

答案 0 :(得分:3)

在第一个中,您直接调用Second.called并提升,以便永远不会调用spawn。第二个版本将调用spawn,新进程将调用Second.called,而不会引发随后引发的args。

答案 1 :(得分:2)

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