Erlang shell перестал загружать мои модули

Это работало нормально на прошлой неделе. Я бы открыл

cd myprojectdir erl (erlang shell). c(room). {ok, R} = room:go().

тогда я мог бы использовать gen_server для отправки сообщений в R, взаимодействуя с моим модулем комнаты.

Я начал в ветке ковбойской маршрутизации. Я видел, что все работает хорошо, когда я смотрел на это сегодня, я получал ошибки компиляции. Поэтому я откатился на свою главную ветку. Все еще есть ошибки в оболочке, даже откат нескольких коммитов, хм.

Когда я пытаюсь вызвать номер:go(), другие модули печатаются как undef, Если я скомпилирую каждый из них по очереди, то будет работать room:go().

Комната запускает столы, столы запускают часы, места и игру, игра запускает доску и действия.

https://github.com/quantumproductions/tunnel

2> c(game).
{ok,game}
3> game:go().
** exception exit: undef
     in function  board:go/0
        called as board:go()
     in call from game:init/1 (game.erl, line 57)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
4> c(board).
{ok,board}
5> game:go().
** exception exit: undef
     in function  actions:go/0
        called as actions:go()
     in call from game:init/1 (game.erl, line 58)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
6> c(actions).
{ok,actions}
7> actions:go().
{ok,<0.93.0>}
8> game:go().
{ok,<0.95.0>}
9> c(room).
{ok,room}
10> room:go().
** exception exit: undef
     in function  table:go/0
        called as table:go()
     in call from room:tablePids/2 (room.erl, line 33)
     in call from room:init/1 (room.erl, line 80)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
11> c(table).
{ok,table}
12> room:go().
** exception exit: undef
     in function  clock:go/0
        called as clock:go()
     in call from table:init/1 (table.erl, line 7)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
13> c(clock).
{ok,clock}
14> room:go().
** exception exit: undef
     in function  seats:go/0
        called as seats:go()
     in call from table:init/1 (table.erl, line 8)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
15> c(seats).
{ok,seats}
16> room:go().
** exception exit: undef
     in function  hall:go/0
        called as hall:go()
     in call from room:init/1 (room.erl, line 81)
     in call from gen_server:init_it/6 (gen_server.erl, line 328)
     in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 247)
17> c(hall).
{ok,hall}
18> room:go().
{ok,<0.159.0>}
19>
=ERROR REPORT==== 29-Jan-2017::17:37:45 ===
Error in process <0.169.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

=ERROR REPORT==== 29-Jan-2017::17:37:46 ===
Error in process <0.170.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

=ERROR REPORT==== 29-Jan-2017::17:37:47 ===
Error in process <0.171.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

=ERROR REPORT==== 29-Jan-2017::17:37:48 ===
Error in process <0.172.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

=ERROR REPORT==== 29-Jan-2017::17:37:49 ===
Error in process <0.173.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

=ERROR REPORT==== 29-Jan-2017::17:37:50 ===
Error in process <0.174.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

Каждая функция go () - это просто удобство для

go() ->
  gen_server:start_link(?MODULE, [], []).

Versioning:

Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V8.2  (abort with ^G)

Что случилось?

РЕДАКТИРОВАТЬ:

s: s из моего модуля ярлыков

-module(s).
-export([s/2]).
% Shortcuts.

% Send
s(Pid, Message) ->
  gen_server:call(Pid, Message).

Сообщение об обновлении отправляется по таймеру в комнате, которая пытается отправить обновление в каждую из таблиц.

РЕДАКТИРОВАТЬ:

Я изменил нулевой код. Вот что происходит, когда я бегу сейчас.. это потому, что у меня уже есть файлы *.beam?

=ERROR REPORT==== 29-Jan-2017::17:50:19 ===
Error in process <0.200.0> with exit value:
{undef,[{s,s,[<0.59.0>,update],[]}]}

BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
^C~/tunnel:.ls
actions.beam    clock.beam  hall.beam   s.erl       table.erl
actions.erl clock.erl   hall.erl    seats.beam  timer.erl
board.beam  game.beam   room.beam   seats.erl
board.erl   game.erl    room.erl    table.beam
~/tunnel:.erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V8.2  (abort with ^G)
1> c(board).
{ok,board}
2> c(all).
all.erl: no such file or directory
error
3> c().
** exception error: undefined shell command c/0
4> c(room).
{ok,room}
5> c(s).
{ok,s}
6> room:go().
{ok,<0.96.0>}
7>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
^C~/tunnel:.erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V8.2  (abort with ^G)
1> c(room).
{ok,room}
2> room:go().
{ok,<0.72.0>}
3> room:test().
  All 4 tests passed.
ok
4>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
^C~/tunnel:.
~/tunnel:.erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V8.2  (abort with ^G)
1> c(room).
{ok,room}
2> room:go().
{ok,<0.72.0>}
3> room:test().
  All 4 tests passed.
ok
4>

1 ответ

Решение

Это звучит для меня как ваш модуль s не был скомпилирован в первом случае, особенно если мы увидим, что вы скомпилировали его в своем редактировании, где работает код.

Ошибка

=ERROR REPORT==== 29-Jan-2017::17:37:50 ===
Error in process <0.174.0> with exit value:
{undef,[{s,s,[<0.159.0>,update],[]}]}

говорит вызов модуля s и функция s с аргументами <0.159.0> а также update не удалось с undef.

Erlang позволит вам скомпилировать модуль, который имеет вызовы еще не определенных функций, поэтому у нас есть такие инструменты, как xref.

Если вы не используете подходящий инструмент для сборки, такой как mix, rebar3 или https://erlang.mk/, я бы посоветовал вам это сделать.

Другие вопросы по тегам