您正在爲模塊定義一個全局變量,這是不允許的。請記住,Erlang中的「變量」實際上是「符號」,所以在所有函數或進程中沒有「全局」常量的概念。在Erlang中最接近這個的是模塊中定義的一個宏,但是如果一個值只在一個地方需要,並且你想命名它,那麼這個必須在函數定義中完成。
此外,請勿使用io:fwrite/1或io:format/1。問題是可能在您傳遞的字符串中包含轉義字符。例如,這會導致一個錯誤:Code = "Wee~!", io:format(Code).
並且它不會被編譯器捕獲。
做的最常見的就是在函數中定義一個變量:
-module(foo).
-export([start/0]).
start() ->
Code = "Z00887",
io:fwrite("~p~n", [Code]).
你也可以只使用直接值:
-module(foo).
-export([start/0]).
start() ->
io:fwrite("Z00887~n").
或者你可以定義在整個宏模塊:
-module(foo).
-export([start/0]).
-define(CODE, "Z00887").
start() ->
io:fwrite("~p~n", [?CODE]).
或者你甚至可以定義一個存根函數返回你wa NT:
-module(foo).
-export([start/0]).
start() ->
io:fwrite("~p~n", [code()]).
code() -> "Z00887".
這最後的版本實際上是不怪異,因爲它可能一開始看起來。在很早的時候,當你開發一些代碼的時候,你會知道你需要一個值,你需要以某種方式派生出來,但是不想擔心它的細節。存根函數是一種很好的方式,可以隱藏將來如何做的細節,而無需編寫宏代碼,變量定義等,您必須記住稍後返回並更改。例如,上面的最後一個例子在將來幾乎肯定會變成這樣的事情:
-module(foo).
-export([start/0]).
start() ->
io:fwrite("~p~n", [code()]).
code() ->
{ok, Code} = some_init_module:get_code(),
Code.
請記住這一點。它使Erlang幾乎像Guile或Scheme一樣是原型友好的。
使用'-define(常數,更換).'宏,如果要定義一個方法 http://erlang.org/doc/reference_manual/macros.html 的恆定外或做:'開始() - >代碼=「Z00887」,io:fwrite(代碼).' – 2014-09-10 16:37:15
[使用Erlang模塊內部的匿名函數時出現問題]的可能重複(http://stackoverflow.com/questions/18401291/trouble-when- using-anonymous-functions-inside-erlang-modules) – legoscia 2014-09-10 16:41:18
非常感謝! start() - > Code =「Z00887」,io:fwrite(Code)。是工作! – 2014-09-10 19:04:41