標籤:
Erlang的模式比對功能非常強大,非常方便。
模式比對有如下重要作用:
1、選定控制流程分支
2、完成變數賦值(綁定)
3、拆解資料結構(選擇和提取各個組成部分)
運算子的左側是一個模式,右側是一個普通運算式,做匹配運算時,首先計算右側的運算式,得到一個值,接著拿該值去匹配左側的模式。若匹配失敗,則報錯,若匹配成功,在左側模式中出現的所有變數都會與右側值中的相應組成部分綁定,然後程式將繼續計算緊隨其後的運算式。
case get_roleequipinfo(RoleEquipId) of
[] ->
{false,_Err}; #ets_role_equip{resetAttack = Attack,resetCrit = Crit,resetHit = Hit,resetSpeed = Speed,resetDodge = Dodge,resetShield = Shield,resetDefence = Defence} = RoleEquipInfo ->......................................這種模式比對是這樣的:首先將get_roleequipinfo函數的傳回值匹配給變數RoleEquipInfo,然後變數再與前面模式比對,並一一賦值,很方便吧,簡直就是神奇! Reply = case X of {false,Error} -> {false,Error}; _ -> ..... end, case Reply of {false,_Error} -> ......; _ -> ....... end.這種模式下特別注意Reply的值,因為Reply會在後面用到,所以要考慮Reply所有的值的可能性! testfun() -> 語句 case X of A -> ......; B -> ......; C -> ......; _ -> ...... end. 函數的傳回值是case of的傳回值。
Erlang --- 模式比對