我用两种方式在灵药中产生了一个过程:
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而不是第一个?感谢
答案 0 :(得分:3)
在第一个中,您直接调用Second.called
并提升,以便永远不会调用spawn
。第二个版本将调用spawn
,新进程将调用Second.called
,而不会引发随后引发的args。
答案 1 :(得分:2)
在第一个示例中,代码在到达实际spawn
之前就已经爆炸了。我想你想要做的是spawn(&Second.called/0)
,它将返回与第二个例子相同的错误。