2010-11-18 53 views
3

所以我知道基本的Hello World程序(如在一個輸出字符串不是一個專爲二郎同卵和其他的東西學習)如下在erlang中正確使用Hello World?

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

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

然後我跑ERL

>erl 

類型

>c(hello) 

然後

>hello 

對於escript版本會是這樣嗎?

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

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

然後

chmod u+x hello 

哪裏你好是文件名?

爲什麼我不能使用與模塊相同的格式? (main/0和main())?

回答

10

這就是escript系統的工作方式。您的腳本必須包含運行時調用的函數main/1。 escript需要一種方法將命令行參數傳遞給函數,並將其作爲字符串列表執行,因此需要您的main函數接受一個參數。

當您構建模塊並從shell手動運行它時,類似的要求也適用 - 您的模塊必須導出您想調用的函數(在您的示例中爲start/0)。

事實上,你的例子是不正確的。您創建並編譯模塊,但從不調用它。評估

hello. 

在shell中簡單地重複原子值hello。要真正打電話給你的世界你好,你需要評估:

hello:start().