Erlang - 變數



在 Erlang 中,所有變數都使用 ‘=’ 語句繫結。所有變數都必須以大寫字母開頭。在其他程式語言中,‘=’ 符號用於賦值,但在 Erlang 中則不是這樣。如上所述,變數是用 ‘=’ 語句定義的。

需要注意的是,Erlang 中的變數是不可變的,這意味著要更改變數的值,需要銷燬它並重新建立。

Erlang 中的基本變數型別在最後一章解釋:

  • 數字 - 用於表示整數或浮點數。例如 10。

  • 布林值 - 表示布林值,可以是 true 或 false。

  • 位串 - 位串用於儲存未型別化的記憶體區域。例如 <<40,50>>。

  • 元組 - 元組是一種複合資料型別,具有固定數量的項。例如 {40,50}。

  • 對映 - 對映是一種複合資料型別,具有可變數量的鍵值對關聯。對映中的每個鍵值對關聯稱為關聯對。例如 {type=>person,age=>25}。

  • 列表 - 列表是一種複合資料型別,具有可變數量的項。例如 [40,40]。

變數宣告

定義變數的通用語法如下:

語法

var-name = var-value

其中:

  • var-name - 這是變數的名稱。

  • var-value - 這是繫結到變數的值。

以下是一個變數宣告的示例:

示例

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

start() -> 
   X = 40, 
   Y = 50, 
   Result = X + Y, 
   io:fwrite("~w",[Result]).

在上面的例子中,我們有兩個變數,一個是 X,繫結到值 40,另一個是 Y,繫結到值 50。另一個名為 Result 的變數繫結到 X 和 Y 的和。

上面程式的輸出將是:

輸出

90

變數命名

如上所述,變數名必須以大寫字母開頭。讓我們來看一個用小寫字母宣告的變數的例子。

示例

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

start() -> 
   X = 40, 
   Y = 50, 
   result = X + Y, 
   io:fwrite("~w",[Result]).

如果你嘗試編譯上面的程式,你會得到以下編譯時錯誤。

輸出

helloworld.erl:8: variable 'Result' is unbound

其次,所有變數只能賦值一次。讓我們來看一個多次賦值變數的例子。

示例

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

start() -> 
   X = 40, 
   Y = 50, 
   X = 60, 
   io:fwrite("~w",[X]).

如果你嘗試編譯上面的程式,你會收到以下編譯時錯誤。

輸出

helloworld.erl:6: Warning: variable 'Y' is unused
helloworld.erl:7: Warning: no clause will ever match
helloworld.erl:7: Warning: the guard for this clause evaluates to 'false'

列印變數

在本節中,我們將討論如何使用各種函式來列印變數。

使用 io:fwrite 函式

你可能在以上所有程式中都看到了這個 (io:fwrite)。fwrite 函式是 Erlang 的 ‘io’ 模組的一部分,可用於輸出程式中變數的值。

以下示例顯示了可與 fwrite 語句一起使用的幾個引數。

示例

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

start() -> 
   X = 40.00, 
   Y = 50.00, 
   io:fwrite("~f~n",[X]), 
   io:fwrite("~e",[Y]).

上面程式的輸出將是:

輸出

40.000000
5.00000e+1

關於上面程式,需要注意以下幾點:

  • ~ - 此字元表示需要對輸出進行一些格式化。

  • ~f - 引數是一個浮點數,寫為 [-]ddd.ddd,其中精度是小數點後數字的個數。預設精度為 6,不能小於 1。

  • ~n - 用於println到新行。

  • ~e - 引數是一個浮點數,寫為 [-]d.ddde+-ddd,其中精度是寫入的數字個數。預設精度為 6,不能小於 2。

廣告