2013-07-23 40 views
0

我在過去一週裏一直在學習erlang,並且正在閱讀Joe Armstrong的Pragmatic erlang書籍。我在寫一些代碼來創建子進程和所遇到的情況 我在模塊myatom.erl它看起來像這樣erlang中的spawn函數使用另一個模塊中的函數

start(anatom,Fun) -> 
     case whereis(anatom) of 
       undefined -> 
         Pid = spawn(Fun), 
         try register(anatom,Pid) of 
           true -> true 
         catch 
         error:Reason -> 
           Reason 
         end; 
       Other -> {error,already_defined} 
     end. 

功能還有另一個模塊中的函數命名tloop.erl

loop() -> 
    receive 
     { From , No } -> From ! { self(), No*4}; 
     Other -> void 
    end. 

如果我要使用start()在erlang shell中產生循環,我該怎麼做? 我收到以下錯誤,當我提前做

anatom:start(atomname,tloop:loop). 

謝謝!

anatom:start(myatom,fun tloop:loop). 
* 2: syntax error before: ') 

回答

2

您必須編寫以下

anatom:start(myatom, fun tloop:loop/0). 

你必須指定函數的元數(參數個數),在具有相同名稱但不同的元數二郎功能不被認爲是相同的功能。

+0

謝謝你的回答。 然而,這也沒有解決,我相信真正的原因是當我們用一個新的原子稱爲newatom的函數時,erlang無法與(newatom,fun)在開始的主體中匹配任何模式。它期望所有呼叫匹配(myatom,有趣)。所以我用AnAtom替換了myatom,並且它的工作原理 – draklor40

+1

當然,函數參數必須匹配:) – niahoo

相關問題