2010-11-18 6 views
3

だから私はエルランのHello Worldのための適切なエスケープ?

-module(hello). 
-export([start/0]). 

start() -> 
    io:format("Hello, World!"). 

その後、私はERL

を実行し、次のように基本的なHello Worldのプログラムは、(出力に1つの文字列ではないアーランは卵や他のものとの学習のために設計された1つのように)であることを知っています
>erl 

タイプ

>c(hello) 

、次いで

>hello 

エスケープバージョンの場合はこれでしょうか?ハローはファイル名です

#!/usr/bin/env escript 
-export([main/1]). 

main([]) -> io:format("Hello, World!~n"). 

その後

chmod u+x hello 

モジュールと同じフォーマットを使用できないのはなぜですか? (メイン/ 0とメイン())?

答えて

10

これは、エスケープシステムの動作方法です。エスケープには、実行時に呼び出す関数main/1が含まれている必要があります。 escriptはコマンドライン引数を関数に渡す方法を必要とし、文字列のリストとしてこれを行います。したがって、main関数が引数を1つ取る必要があります。

モジュールをビルドしてシェルから手動で実行する場合、同様の要件が適用されます。モジュールは、呼び出す関数(例ではstart/0)をエクスポートする必要があります。

実際、あなたの例は正しくありません。モジュールを作成してコンパイルしますが、決して呼び出さないでください。評価する

hello. 

シェルでは、単純にアトム値helloを繰り返します。あなたのハローワールド機能を実際に呼び出すには、評価する必要があります:

hello:start().