some_id
some_id

Reputation: 29896

Erlang error when spawning a process

I start a process as follows

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

But get the following error when trying to run start().

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

The module is called dist_erlang.

What am I doing wrong?

Thanks

Upvotes: 13

Views: 8876

Answers (2)

Jakub M.
Jakub M.

Reputation: 33867

Although the question is old, I post what helped me when I was wrestling with the Erlang compiler.

This (incomplete) snippet

-export([start/0]).

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

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

fails with error:

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

until you export explicitly ping/1 function. So with this export:

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

it works. I think that the confusion came from some examples from Learn You Some Erlang for great good where the modules sometimes have

-compile(export_all).

which is easy to overlook

Upvotes: 19

Greg Hewgill
Greg Hewgill

Reputation: 994531

Based on your previous question, your loop function takes one parameter, not none. Erlang is looking for loop/0 but can't find it because your function is loop/1.

The third parameter to spawn/3 is a list of parameters to pass to your function, and in the case you've shown the list is empty. Try:

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

In this case, the third parameter is a list that contains one element (an empty list).

Upvotes: 16

Related Questions