一环肘、算數(shù)表達式及其優(yōu)先級
操作符 | 描述 | 參數(shù) | 優(yōu)先級 |
---|---|---|---|
X+/-Y | 加減法 | 數(shù)值 | 3 |
X*/Y | 乘除法 | 數(shù)值 | 2 |
X div Y | 整除 | 整數(shù) | 2 |
X rem Y | 取余 | 整數(shù) | 2 |
X band Y | 按位于 | 整數(shù) | 2 |
X bor Y | 按位或 | 整數(shù) | 3 |
X bxor Y | 按位異或 | 整數(shù) | 3 |
X bsl N | 左移 | 整數(shù) | 3 |
X bsr N | 右移 | 整數(shù) | 3 |
bnot | 按位取反 | 整數(shù) | 2 |
二糜芳、元數(shù)(arity)
即函數(shù)的參數(shù)個數(shù)
三、屬性
1.預定義的模塊屬性
-module(modname).
modname必須是一個原子類型魄衅,且和文件名一致-import(Mod,[Fun1/Arity,...])
從Mod中導入列表中的函數(shù)到本模塊中峭竣,調(diào)用時就無需指定模塊名了,但是erlang標準庫是不用導入的-export([Fun1/Arity,....])
導出當前模塊里的函數(shù)晃虫,只有導出之后才可以被外部調(diào)用-compile(Options)
編譯器的編譯選項皆撩,可以是單個,也可以是列表-vsn(Version)
指定模塊的版本號哲银,Version可以是任何字面數(shù)據(jù)類型
2.用戶定義的模塊屬性
- -sometag(Value)
sometag必須是一個原子類型扛吞,Value是一個字面數(shù)據(jù)類型,編譯時會被打包荆责,運行時可以讀取屬性
讀取方法:modname:module_info()
返回一個列表,Value在其中一個tag為attributes的元組中
另一種讀取方法:beam_lib:chunks("ModSrc",[attributes])區(qū)別在于前者需要加載模塊滥比,后者不需要
四、塊表達式
應用場景:代碼某處要求是單個表達式做院,但我們需要做多個事情盲泛,也就是使用表達式序列。
舉例:
begin
Expr1,
...,
ExprN
end.
五键耕、布爾值
Erlang沒有單獨的布爾值類型寺滚,但是可以用原子類型的true和false表示
六、布爾表達式
- not B1:邏輯非
- B1 and B2:邏輯與
- B1 or B2:邏輯或
- B1 xor B2:邏輯異或
七屈雄、注釋
Erlang的注釋符號是%村视,很可惜,他有沒有塊的注釋
八酒奶、包含文件
- -include(FileSrc).
- -include_lib(FileSrc).
包含文件的擴展名是.hrl蚁孔,比如記錄的定義會放在hrl里方便統(tǒng)一rr
九、宏
1.定義方法
- -define(Constant,Replacement).
- -define(Func(Var1,...,VarN),replacement).
當處理器遇到了類似?MacroName形式的表達式時惋嚎,會展開這個宏杠氢,并進行計算替換
-define(Func(a,b),{a,b}).
foo(A)->
?Func(1,1).%擴展之后就是{1,1}
還有一些預定義提供了當前模塊的信息
- ?FILE展開當前的文件名
- ?MODULE展開當前的模塊名
- ?LINE展開當前的行號
2.宏控制流
- -undef().取消宏定義
- -ifdef().判斷是否定義過,true則往下執(zhí)行
- -ifndef().false則往下執(zhí)行
- -else.用于ifdef和ifndef后面
- -endif.用于結束ifdef和ifndef
舉例:
-ifdef(debug_flag).
-define(DEBUG(X),io:format("DEBUG ~p:~p ~p~n"瘸彤,[?MODULE,?LINE,X])).
-else.
-define(DEBUG(X),void).
-endif.
十一修然、進程字典
相當于erlang進程里的私有數(shù)據(jù)區(qū)域。
操作BIF:
- put(Key,Value)->OldValue.鍵存在則更新值质况,不存在則創(chuàng)建關聯(lián)
- get(Key)->Value.
- get()->[{Key,Value}]返回整個字典
- get_keys(Value)->[Key]返回值是Value的所有Key
- erase(Key)->Value 刪除Key.
- erase()->[{Key,Value}]刪除整個字典
十二愕宋、比較數(shù)據(jù)類型
這里側重講其中4個
- ==
這個比較要慎重使用,100次里有99次應該用的是=:=
==只有在比較浮點數(shù)和整數(shù)時可用结榄。 - /=與=/=
/=這個比較的意思是不等于中贝,而=/=的意思是不完全相同