elixir不僅允許你把函式放入變數, 還允許你把函式作為引數傳遞給另乙個函式. 在數學中, 乙個高階函式通常是乙個接受乙個或多個函式作為輸入或者
同時也返回乙個函式作為輸出的函式. 這個特性使elixir語言非常強大.
iex> square = fn x -> x * x end
#function<6.17052888 in :erl_eval.expr/5>
iex> enum.map(1..10, square)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
上面定義了乙個匿名函式, 它接受乙個數字, 求平方值並賦值給square
變數. 然後使用enum.map
對數字列表1..10
中的每乙個數字計算平方值.
注: 關於閉包有如下幾個特性:1..10
請參考 range.高階函式參考資料:
iex(1)> outside_var = 5
iex(2)> print = fn() -> io.puts(outside_var) end
iex(3)> outside_var = 6
iex(4)> print.()
5
可以看到, 即使修改了outside_var
的值, 但結果任然是5
.
正是由於這個特性使erlang
消除了併發程式設計中同一時刻
訪問全域性變數的競太條件
, 這也是erlang
作為開發併發系統的首選語言之一.
看下面的例子:
iex> tuple =
iex> put_elem(tuple, 1, "world")
iex> tuple
是的, 你仍能夠給乙個變數重新賦值.
defmodule assignment do
def change_me(string) do
string = 2
endend
正常情況下給變數繫結乙個值(或者在其他語言中成為賦值)操作如下:
name = "developerworks"
這裡的name為乙個變數, "developworks"為其值.
那麼關於^
, 乙個更容易理解的方式, 可以認為是^name
是獲取name
的值. 並且^
符號只能用在模式匹配中.
檔案操作的幾個基本函式
檔案操作中的函式要注意是對檔案進行操作,而不是對輸出螢幕進行操作 在對檔案進行操作前,要先開啟函式 fopen 1,對檔案進行寫入時有以下函式 fputc fputs fwrite fprintf 2,對檔案進行讀取時有以下函式 fgetc fgets fread fscanf 3,對檔案操作完成後...
程式設計的幾個基本原則
1 開閉原則 對擴充套件開放,對修改關閉 也就是用抽象構建框架,用實現擴充套件細節 2 單一職責 乙個類實現的功能要盡可能單一,避免像乙個函式實現兩個功能這樣的設計 這時最後重構成兩個函式 3 黎克特制替換原則 不要破壞繼承體系,如正方形和長方形類,如果把正方形當做長方形的子類 正方形只需定義乙個邊...
網路程式設計 基本函式
位元組排序函式 include 返回網路位元組序的值 uint16 t htons uint16 t host16bitvalue uint32 t htonl uint32 t host32bitvalue 返回主機位元組序的值 uint16 t ntohs uint16 t net16bitva...