2017-01-29 11 views
0

先週はうまくいきました。私はその後、私は自分の部屋のモジュールとの相互作用、Rにメッセージを送信するために使用することができgen_serverErlangシェルがモジュールのロードを停止しました

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

を開くでしょう。

私はカウボーイルーティングブランチで始めました。私はものがうまく動作しているのを見ていた、今日私はそれを見てコンパイルエラーを取得していた。だから私は元の支店に戻りました。シェルでエラーが残っていて、いくつかのコミットをロールバックしても、hm。

room: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() -> 
    gen_server:start_link(?MODULE, [], []). 

バージョン管理のためのちょうど便利です:何が起こった

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) 

EDIT:

S:Sは私のショートカットモジュール

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

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

更新メッセージは、各表に更新を送信しようとルーム、中タイマーに送られるからです。

編集:

私はZEROコードを変更しました。ここで私は今実行したときに何が起こるのですか?私はすでに* .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],[]}]} 

エラーは、コールが引数<0.159.0>updatesと機能sはundefをして失敗したモジュールに言っています。

Erlangはまだ定義されていない関数を呼び出すモジュールをコンパイルすることができます。そのため、私たちはtools like xrefを持っています。

mixrebar3またはerlang.mkのような適切なビルドツールを使用していない場合は、お手数ですが、

関連する問題