Erlang的一些程式設計技巧分享

2022-09-20 12:48:10 字數 1773 閱讀 2562

guard

guard可以以逗號或者分號分隔,以逗號分隔表示最終的結果為各個guard的and結果,以分號則是只要任意乙個guard為true則最終結果為true。

複製** **如下:

guard(x, y) when not(x>y), is_ato程式設計客棧m(x) ->

x + y.

guard在list comprehension中可以篩選元素:

複製** **如下:

fycgxewenewnodes  = [node || node

guard中不能使用自定義函式,因為guard應該保證沒有***,但自定義函式無法保證這一點,所以erlang禁止在guard中使用自定義函式。

list comprehension

list comprehension是乙個非常有用的語法特性,它可以用於構造乙個新的list,可以用於將一種list對映到另一種list,可以篩選list元素。只要是跟list相關的操作,優先考慮用list comprehension來實現,將大大減少**量。記住list comprehension的語法:

複製** **如下:

[expression || generators, guards, generators, ...]

timer

一定時間後向程序傳送訊息:

複製** **如下:

erlang:send_after(token_lifetime(), self(), renew_token),

一段時間後執行某個函式:

複製** **如下:

= timer:apply_interval(interval, ?module, announce, [self()]),

gb_tfycgxewerees/gb_set

pattern match

pattern match有太多作用了:

pattern match in case

case中判定多個值,比其使用邏輯運算子簡潔多了:

複製** **如下:

a = 1, b = 2,

case of

-> true;

-> false

endpattern match to check data typepattern match可以用於檢測變數的型別,可以用於檢測函式的返回值,就像c/c++中的assert一樣,可以用於盡早檢測出異常狀態:

複製** **如下:

ping( = ip, port) ->

ok.= call().

list操作

新增元素

新增元素進list有很多方式:

複製** **如下:

[2]++[3, 4].

[2|[3,4]].

foldl/foldr

用於遍歷list計算出乙個「累加值「。

複製** **如下:

lists:foldl(fun(x, sum) -> x + sum end, 0, [1,2,3,4,5]).

也就是遍歷乙個list,將每個元素傳遞給fun,將fun的返回值繼續傳遞給下乙個元素。

zip將兩個list一一對程式設計客棧應構造出乙個tuple,作為新的list裡的元素。

複製** **如下:

lists:zip([1, 2, 3], [4, 5, 6]).

&  => [,,]

數字進製16##ff,表示16進製制數字0xff,通用格式為scale##num,即scale進製下的num。

本文標題: erlang的一些程式設計技巧分享

本文位址:

Pandas的一些技巧分享

pandas 是乙個廣泛應用於資料分析等領域的 python 庫。關於它的教程有很多,但這裡會一些比較冷門但是非常有用的技巧。read csv 這是乙個大家都應該知道的函式,因為它就是讀取 csv 檔案的方法。但如果需要讀取資料量很大的時候,可以新增乙個引數 nrows 5,來先載入少量資料,這可以...

c 程式設計的一些技巧

第一點,使用全域性物件的建構函式在程式啟動前呼叫函式 有一些應用程式需要在主程式啟動前呼叫其它函式。如 轉態過程函式 登記 功能函式都是必須在實際程式執行前被呼叫的。最簡單的辦法是通過乙個全域性物件 的建構函式來呼叫這些函式。因為全域性物件都是在主程式開始前被構造,這些函式 都將會在main 之前返...

一些程式設計上的小技巧

下面介紹的方法 程式設計珠璣 裡也有所提及 下面的例子是用python寫的,但這些概念適用於任何程式語言。找出程式的主執行路徑 你的程式大部分時間都執行這些模組。首先優化這部分 但也不要在程式實現的第一次迭代中進行優化。那些處理邊界情況或失敗 異常處理的地方,這部分 不需要優化,除非它們引起了值得注...