10

コマンドラインまたはbashスクリプトのいずれかを介してErlangファイルを開始できます。

exec erl file.erl

しかし、このファイル内で関数を直接開始する方法がわからないようです。

例えば

exec erl file.erl -f function()

どんな提案もありがたい...

4

2 に答える 2

19

あなたがおそらく欲しいのはerl -s module_name function_name

例で行ったように、erlコマンドでerlangファイルを指定しないことに注意してください。ErlangVMはコードパス内のすべてのモジュールをロードします。これにはローカルディレクトリが含まれます。

http://www.erlang.org/doc/man/erl.htmlから:

-run Mod [Func [Arg1、Arg2、...]] (initフラグ)initに指定された関数を呼び出させます。Funcはデフォルトで開始します。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1、Arg2、...]を引数としてアリティ1であると見なされます。すべての引数は文字列として渡されます。init(3)を参照してください。

-s Mod [Func [Arg1、Arg2、...]] (initフラグ)initに指定された関数を呼び出させます。Funcはデフォルトで開始します。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1、Arg2、...]を引数としてアリティ1であると見なされます。すべての引数はアトムとして渡されます。init(3)を参照してください。

于 2010-11-27T14:54:41.773 に答える
0

erlマニュアルページ][1] shows all the command line options, but [init(3) `には例があり、場合によってはより適切な説明があるようです。この投稿にもいくつかの良い例があります。

また、以下のオプションは相互に排他的ではありません。、、、およびスイッチを混在させることができます-run-s-eval

オプション1:erl -runまたはerl -s

erlマニュアルページでは-sとスイッチについて説明してい-runます(テキストは同じです)が、例はにありますinit(3)(以下のブロック引用を参照)。


警告
呼び出されたモジュールはすでにコンパイルされている必要があります。そうしないと、Erlangランタイムがinitでクラッシュし、不可解なエラーメッセージが生成されます(関数が未定義であることを示します)。


-run Mod [Func [Arg1, Arg2, ...]]

システムの初期化中に、指定された関数呼び出しを評価します。 Funcデフォルトはstart。引数が指定されていない場合、関数はアリティ0であると見なされます。それ以外の場合は、リスト[Arg1,Arg2,...]を引数として、アリティ1であると見なされます。すべての引数は文字列として渡されます。例外が発生した場合、Erlangはエラーメッセージで停止します。

例:

% erl -run foo -run foo bar -run foo bar baz 1 2

これにより、Erlangランタイムシステムが起動し、次の関数が評価されます。

foo:start()
foo:bar()
foo:bar(["baz", "1", "2"]).

関数は初期化プロセスで順次実行され、初期化プロセスは通常どおり終了し、ユーザーに制御を渡します。これは、-run返されない呼び出しがそれ以上の処理をブロックすることを意味します。これを回避するには、このような場合にスポーンのバリアントを使用します。

オプション2:erl -eval

上記のセクションで述べたように、モジュールは-runまたは-sで使用するためにコンパイルする必要があるため、前に呼び出すか、ミックスerlcに追加します。が実行されるのと同じフォルダにある-evalと仮定しますamod.erlerl

$ erl -eval 'compile:file(amod)' -run amod

これはErlangシェルプロンプトにドロップします。Erlangランタイムのみを起動する必要がある場合は、-noshellerlmanページ)を参照してください。

差出人init(3)

-eval Expr

Exprシステムの初期化中に任意の式をスキャン、解析、および評価します。これらのステップのいずれかが失敗した場合(構文エラー、解析エラー、または評価中の例外)、Erlangはエラーメッセージで停止します。次の例では、Erlangを16進計算機として使用しています。

% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\
-s erlang halt
BF

複数の-eval式が指定されている場合、それらは指定された順序で順番に評価されます。-eval式は-s-run関数呼び出しで順番に評価されます(これも指定された順序で)。-sおよびと同様に-run、終了しない評価はシステム初期化プロセスをブロックします。

于 2019-12-12T18:08:59.413 に答える