2

Erlangモジュール内でErlang関数を定義する方法が完全にはわかりません。次のエラーが発生します。

11> invoke_record:invoke().
** exception error: undefined function erlang:rr/1

レコードを「初期化」するためにビーム実行可能ファイル内からfromを呼び出そうとするこの単純なコードrr(?MODULE).から、毎回シェルから呼び出す必要がないようにします。

-module(invoke_record).
-export([invoke/0]).
-record(process, {pid,
                reference="",
                lifetime=0
                }).
invoke() ->
    erlang:rr(?MODULE).
4

4 に答える 4

4

このコマンドrr("file.hrl").は、デバッグ目的でシェルでのみ使用することを意図しています。

他のユーザーが回答で強調しているように、erlang コード内の .hrl ファイルに含まれるレコード (または関数) をインポートする正しい方法は、コマンドを使用すること-include("file.hrl')です。

コードに.hrlファイルをインクルードすると (通常、OTP ビヘイビアーに基づくモジュールでは、これは-export(...)パーツの後で行われます)、Erlang レコード (または関数) を問題なく参照できます。

于 2013-03-09T14:26:54.173 に答える
3

シェルで多くのレコード定義を読み取ることが目的の場合、デバッグを容易にするために、必要なすべてのincludeステートメントを含むファイルを作成し、シェルでrrを1回呼び出すだけです。

rec.hrlで:

-include("include/bank.hrl").
-include("include/reply.hrl").

とシェルで

1> rr("rec.hrl").
[account,reply]
2>

VMの起動時に、これを自動的に実行する方法が見つかりませんでした。

于 2013-03-08T12:40:55.787 に答える
3

rrシェルコマンドです。コンパイルされたコードでは使用できません。

http://www.erlang.org/doc/man/shell.html

于 2013-03-08T01:10:28.840 に答える
1

プロジェクトで作業する場合、必要なすべてのインクルードと、その特定のプロジェクトで使用するその他のコマンド ライン引数をプレーン テキスト ファイルに収集できます。プレーン テキスト ファイルを作成したら、シェルを起動できます。

erl -args_file FileName

ここで、FileName はプレーン テキスト ファイルの名前です。erl が受け入れるすべてのコマンドライン引数が許可されていることに注意してください。ERTS リファレンス マニュアルのerl フラグも参照してください。

于 2016-04-20T14:46:56.300 に答える