2010-10-11 3 views
8

rozpocząć proces następującoErlang błąd podczas tarła proces

start() -> 
register (dist_erlang, spawn(?MODULE, loop, [])), 
ok. 

ale się następujący komunikat o błędzie podczas próby uruchomienia rozpoczęcia().

Error in process <0.62.0> with exit value: {undef,[{dist_erlang,loop,[]}]}

Moduł nazywa się dist_erlang.

Co robię źle?

Dzięki

Odpowiedz

14

podstawie swojej previous question, czynność loop przyjmuje jeden parametr, a nie równych. Erlang szuka loop/0, ale nie może go znaleźć, ponieważ Twoja funkcja to loop/1.

Trzeci parametr do to lista parametrów parametrów przekazywanych do funkcji, w przypadku, gdy pokazana lista jest pusta. Wypróbuj:

register (dist_erlang, spawn(?MODULE, loop, [[]])) 

W tym przypadku trzecim parametrem jest lista zawierająca jeden element (pusta lista).

+0

naprawdę wdzięczni za pomoc. Dzięki :) – jarryd

10

Mimo, że pytanie jest stare, zamieszczam to, co pomogło mi, gdy walczyłem z kompilatorem Erlang.

To (niekompletny) snippet

-export([start/0]). 

start() -> 
    Ping = spawn(?MODULE, ping, [[]]), 
    ... 

ping(State) -> 
    receive 
     ... 
    end. 

nie powiedzie się z powodu błędu:

=ERROR REPORT==== 2-Sep-2013::12:17:46 === 
Error in process <0.166.0> with exit value: {undef,[{pingpong,ping,[[]],[]}]} 

aż eksportowania wyraźnie ping/1 funkcję. Z tym eksportem:

-export([start/0, ping/1]). 

to działa. Myślę, że zamieszanie pochodziły z kilku przykładów z Learn You Some Erlang for great good gdzie moduły mają czasem

-compile(export_all). 

który łatwo przeoczyć

+2

Pozdrawiam! To rozwiązało dokładnie ten problem, który miałem. :) Uważam za dziwne, że musisz wyeksportować funkcję, którą zamierzasz używać lokalnie (przez spawn). – Babyburger