Erlang是動(dòng)態(tài)類(lèi)型語(yǔ)言传泊。所有錯(cuò)誤都在運(yùn)行時(shí)被捕獲料仗,在編譯代碼時(shí)状婶,對(duì)于可能導(dǎo)致失敗的問(wèn)題意敛,編譯器并不總會(huì)給出警告
絕大多數(shù)語(yǔ)言和類(lèi)型系統(tǒng)都旨在寫(xiě)出沒(méi)有錯(cuò)誤的程序,但是Erlang卻認(rèn)為錯(cuò)誤肯定會(huì)發(fā)生
Erlang在語(yǔ)言中提供了一些特性膛虫,基于這些特性可以很容易對(duì)錯(cuò)誤進(jìn)行平滑處理草姻,并且不會(huì)造成不必要的停機(jī)時(shí)間。所以Erlang的動(dòng)態(tài)類(lèi)型系統(tǒng)不是程序可靠性和安全性的障礙
動(dòng)態(tài)類(lèi)型是實(shí)現(xiàn)代碼熱加載的最簡(jiǎn)單方法稍刀。如果在靜態(tài)類(lèi)型系統(tǒng)中要實(shí)現(xiàn)熱加載其難度要遠(yuǎn)遠(yuǎn)高于動(dòng)態(tài)類(lèi)型
-
Erlang同時(shí)還是一個(gè)強(qiáng)類(lèi)型語(yǔ)言碴倾。弱類(lèi)型語(yǔ)言會(huì)在不同的數(shù)據(jù)項(xiàng)之間做隱式的類(lèi)型轉(zhuǎn)換
6 + "1" ** exception error: bad argument in an arithmetic expression in operator +/2 call as 6 + "1"
和許多語(yǔ)言一樣,Erlang也可以通過(guò)強(qiáng)制轉(zhuǎn)換的方式改變數(shù)據(jù)的類(lèi)型
大多數(shù)的類(lèi)型轉(zhuǎn)換都不能用Erlang直接實(shí)現(xiàn)掉丽,所以這些操作都是BIF提供的
-
所有轉(zhuǎn)換函數(shù)的命名都采用
TypeA_to_TypeB
這樣的形式跌榔,都在erlang模塊中實(shí)現(xiàn)erlang:list_to_integer("54"). erlang:integer_to_list(54). erlang:list_to_float("54.32"). erlang:atom_to_list(true). erlang:list_to_binary("hi there"). erlang:binary_to_list(<<"hi there">>).
Erlang語(yǔ)言的一個(gè)小缺陷:因?yàn)楹瘮?shù)命名采用
Type_to_Type
這樣的形式,所以每當(dāng)語(yǔ)言中增加一個(gè)新的數(shù)據(jù)類(lèi)型時(shí)捶障,OTP團(tuán)隊(duì)就需要加入一整套BIF轉(zhuǎn)換函數(shù)注意:BIF函數(shù)
binary_to_term/2
和binary_to_term/1
對(duì)數(shù)據(jù)反序列化的方式一樣僧须。它們之間的最大的區(qū)別是binary_to_term/2
的第二個(gè)參數(shù)是一個(gè)選項(xiàng)列表。如果傳入的是[safe]
项炼,那么如果二進(jìn)制數(shù)據(jù)中含有未知的原子或匿名函數(shù)担平,就將不被解碼示绊,因?yàn)檫@有可能會(huì)耗盡節(jié)點(diǎn)的內(nèi)存或者隱藏著一個(gè)安全風(fēng)險(xiǎn)。如果要解碼的數(shù)據(jù)可能是不安全的暂论,那么請(qǐng)使用binary_to_term/2
而不是binary_to_term/1
-
Erlang有一些專(zhuān)門(mén)負(fù)責(zé)檢測(cè)數(shù)據(jù)類(lèi)型的函數(shù)面褐,它們接收一個(gè)參數(shù),如果參數(shù)的數(shù)據(jù)類(lèi)型正確取胎,就返回
true
展哭,否則,就返回false
闻蛀。它們是為數(shù)不多的匪傍、可以在衛(wèi)表達(dá)式中使用的函數(shù),也稱(chēng)為類(lèi)型檢測(cè)BIFerlang:is_atom(false). erlang:is_integer(123). erlang:is_list("45.67"). erlang:is_binary(<<"hi there">>).
Erlang中沒(méi)有類(lèi)似
type_of(X) -> Type
的函數(shù)來(lái)獲取數(shù)據(jù)項(xiàng)的類(lèi)型觉痛。因?yàn)镋rlang只針對(duì)正確的情況編程役衡,你的程序只需要處理你所期望的情況,對(duì)于除此之外的其他情況薪棒,都應(yīng)該盡快的拋出異常-
如果提供了一個(gè)
type_of(X)
的函數(shù)手蝎,就會(huì)慫恿人們?cè)诖a中寫(xiě)出條件分支my_func(Exp) -> case type_of(Exp) of binary -> Expression1; list -> Expression2 end.
-
在Erlang中應(yīng)該在函數(shù)頭中指定所期望的數(shù)據(jù)類(lèi)型來(lái)進(jìn)行分支處理,而不是根據(jù)某個(gè)類(lèi)似
type_of(X)
的函數(shù)所返回的數(shù)據(jù)類(lèi)型來(lái)做不同處理俐芯。下面這種形式更符合Erlang語(yǔ)言內(nèi)在的聲明性my_func(Exp) when is_binary(Exp) -> Expression1; my_func(Exp) when is_list(Exp) -> Expression2.
所有可以在衛(wèi)表達(dá)式中使用的函數(shù)中棵介,類(lèi)型檢測(cè)BIF幾乎占了一大半。其余的也都是BIF泼各,只是不用于類(lèi)型檢測(cè)
Erlang的數(shù)據(jù)結(jié)構(gòu)看起來(lái)似乎很有限鞍时,但是一般來(lái)講亏拉,僅用列表和元組就足以構(gòu)建其他復(fù)雜的數(shù)據(jù)結(jié)構(gòu)了
Erlang極簡(jiǎn)學(xué)習(xí)筆記<04>——類(lèi)型篇
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)亿笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人栋猖,你說(shuō)我怎么就攤上這事净薛。” “怎么了蒲拉?”我有些...
- 文/不壞的土叔 我叫張陵肃拜,是天一觀的道長(zhǎng)痴腌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)燃领,這世上最難降的妖魔是什么士聪? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮猛蔽,結(jié)果婚禮上剥悟,老公的妹妹穿的比我還像新娘。我一直安慰自己枢舶,他們只是感情好懦胞,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著凉泄,像睡著了一般躏尉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上后众,一...
- 那天胀糜,我揣著相機(jī)與錄音,去河邊找鬼蒂誉。 笑死教藻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的右锨。 我是一名探鬼主播括堤,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绍移!你這毒婦竟也來(lái)了悄窃?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹂窖,失蹤者是張志新(化名)和其女友劉穎轧抗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瞬测,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡横媚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月趟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灯蝴。...
- 正文 年R本政府宣布折砸,位于F島的核電站看疗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏睦授。R本人自食惡果不足惜两芳,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望去枷。 院中可真熱鬧怖辆,春花似錦、人聲如沸删顶。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逗余。三九已至特咆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間录粱,已是汗流浹背腻格。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旗闽,于是被迫代替她去往敵國(guó)和親酬核。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Erlang是一門(mén)函數(shù)式編程語(yǔ)言适室。Erlang的核心特征是容錯(cuò)嫡意,并發(fā)只是容錯(cuò)這個(gè)約束下的一個(gè)副產(chǎn)品 對(duì)于同樣的參數(shù)...
- Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
- 本文寫(xiě)給誰(shuí)看的? 那些已經(jīng)有過(guò)至少一門(mén)編程語(yǔ)言基礎(chǔ)亭病,并且需要快速了解Erlang鹅很,掌握其基本要點(diǎn)嘶居,并馬上投入工作中...
- 世界是并行的罪帖,Erlang程序反應(yīng)了我們思考和交流的方式,人作為個(gè)體通過(guò)發(fā)送消息進(jìn)行交流邮屁,如果有人死亡整袁,其他人會(huì)注...
- pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類(lèi): pyspark.sql...