Ошибка Erlang при порождении процесса - PullRequest
10 голосов
/ 11 октября 2010

Я запускаю процесс следующим образом

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

Но получаю следующую ошибку при попытке запуска start ().

Ошибка в процессе <0.62.0> при выходезначение: {undef, [{dist_erlang, loop, []}]}

Модуль называется dist_erlang.

Что я делаю не так?

Спасибо

Ответы [ 2 ]

15 голосов
/ 11 октября 2010

Исходя из вашего предыдущего вопроса , ваша loop функция принимает один параметр, а не ни один. Эрланг ищет loop/0, но не может его найти, потому что ваша функция loop/1.

Третий параметр spawn/3 - это список параметров, передаваемых в вашу функцию, и в случае, если вы показали, что список пуст. Попробуйте:

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

В этом случае третьим параметром является список, содержащий один элемент (пустой список).

11 голосов
/ 02 сентября 2013

Хотя вопрос старый, я выкладываю то, что помогло мне, когда я боролся с компилятором Erlang.

Этот (неполный) фрагмент

-export([start/0]).

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

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

завершается ошибкой:

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

, пока вы явно не экспортируете функцию ping/1.Так что с этим экспортом:

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

это работает.Я думаю, что путаница возникла из некоторых примеров из Learn You Some Erlang для хорошего блага , где у модулей иногда есть

-compile(export_all).

, который легко пропустить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...