2017-03-02 13 views
1

でプロセスを産卵私は、2つの方法を使用してエリキシルでプロセスを生み出し:はエリキシル

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 

二つの方法の違いは何ですか?なぜ、2番目のプロセスIDだけがプロセスIDを返し、最初のIDを返さないのでしょうか?ありがとう

答えて

2

最初の例では、実際のspawnになる前にコードが爆発しています。あなたがしたいことがspawn(&Second.called/0)で、2番目の例と同じエラーが返ってくると思います。

3

最初のものではSecond.calledを直接呼び出しているので、それが発生してspawnが呼び出されることはありません。 2番目のバージョンはspawnと呼ばれ、新しいプロセスはarg3を持たないでSecond.calledを呼び出すでしょう。