2010-10-11 16 views
8

que se inicia un proceso de la siguiente manerade error cuando Erlang lanzando un proceso

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

Pero el siguiente error al intentar ejecutar start().

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

El módulo se llama dist_erlang.

¿Qué estoy haciendo mal?

Gracias

Respuesta

14

Basado en su previous question, su función loop toma un parámetro, no ninguno. Erlang está buscando loop/0 pero no puede encontrarlo porque su función es loop/1.

El tercer parámetro para spawn/3 es un lista de parámetros para pasar a su función, y en el caso de que haya demostrado que la lista está vacía. Pruebe:

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

En este caso, el tercer parámetro es una lista que contiene un elemento (una lista vacía).

+0

realmente aprecio su ayuda. Gracias :) – jarryd

10

Aunque la pregunta es antigua, publico lo que me ayudó cuando estaba luchando con el compilador de Erlang.

Este (incompleta) de fragmento de código

-export([start/0]). 

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

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

falla con el error:

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

hasta que se exporta de forma explícita ping/1 función. Entonces con esta exportación:

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

funciona. Creo que la confusión provino de algunos ejemplos de Learn You Some Erlang for great good donde los módulos tienen a veces

-compile(export_all). 

que es fácil pasar por alto

+2

¡Salud! Esto resolvió el problema exacto que tuve. :) Me parece raro que tengas que exportar una función que pretendes usar localmente (a través de spawn). – Babyburger

Cuestiones relacionadas