好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > Erlang中的Record詳解

Erlang中的Record詳解

熱門標(biāo)簽:實(shí)體店地圖標(biāo)注怎么標(biāo) 南京電銷外呼系統(tǒng)哪家好 電銷機(jī)器人 深圳 外呼系統(tǒng)會(huì)封嗎 萬利達(dá)綜合醫(yī)院地圖標(biāo)注點(diǎn) 股票配資電銷機(jī)器人 在電子版地圖標(biāo)注要收費(fèi)嗎 武漢AI電銷機(jī)器人 地圖標(biāo)注如何弄全套標(biāo)

在Erlang內(nèi)部只有兩種混合的數(shù)據(jù)類型:List和Tuple,而這兩種都不支持命名訪問,所以如果沒有額外的庫(kù)的話想創(chuàng)建像PHP、Ruby或Python中的關(guān)聯(lián)數(shù)組(Ruby中的Hash)是不可能的

在Ruby中我可以這樣做:

復(fù)制代碼 代碼如下:

server_opts = {:port => 8080, :ip => '127.0.0.1', :max_connections => 10} 

在Erlang的語法級(jí)別不支持這種表達(dá)

為了避免這種限制,Erlang虛擬機(jī)提供了一個(gè)偽數(shù)據(jù)類型,稱為Record
Record支持命名訪問,后面我們會(huì)看到為什么我們稱之為“偽”數(shù)據(jù)類型

定義Record

Record更類似于C中的struct,而不是關(guān)聯(lián)數(shù)組,后者必須一開始就定義好內(nèi)容并且只能保持?jǐn)?shù)據(jù)
這里是一個(gè)服務(wù)器的連接選項(xiàng)的Record例子:

復(fù)制代碼 代碼如下:

-module(my_server). 
 
-record(server_opts, 
  {port, 
  ip="127.0.0.1", 
  max_connections=10}). 
 
% The rest of your code goes here. 

Record使用-record指令來聲明,第一個(gè)參數(shù)是Record的名字,第二個(gè)參數(shù)是一個(gè)Tuple,Tuple包含了Record里的field和默認(rèn)值
在這里我們定義了server_opts這個(gè)Record,它有三個(gè)field:端口、IP和最大連接數(shù)
沒有默認(rèn)的port,ip默認(rèn)值為"127.0.0.1",max_connections默認(rèn)值為10

創(chuàng)建Record

Record通過使用#符號(hào)來創(chuàng)建,下面是創(chuàng)建server_opts這個(gè)Record的實(shí)例的合法方式:

復(fù)制代碼 代碼如下:

Opts1 = #server_opts{port=80}. 

這段代碼創(chuàng)建了一個(gè)server_opts Record,port設(shè)置為80,其他field使用默認(rèn)值
Opts2 = #server_opts{port=80, ip="192.168.0.1"}. 

這段代碼創(chuàng)建了一個(gè)server_opts Record,但是ip設(shè)置為"192.168.0.1"

簡(jiǎn)而言之,當(dāng)創(chuàng)建一個(gè)Record時(shí),你可以包含任何field,省略的field將使用默認(rèn)值

訪問Record

Record的訪問方式很笨拙,如果我想訪問port這個(gè)field,我可以這樣做:

復(fù)制代碼 代碼如下:

Opts = #server_opts{port=80, ip="192.168.0.1"}, 
Opts#server_opts.port 

每次你想訪問一個(gè)Record時(shí)你都必須包含Record的名字,為什么要這樣?
因?yàn)镽ecord不是真正的內(nèi)部數(shù)據(jù)類型,它只是編譯器的小把戲。

在內(nèi)部,Record是Tuple,如下:

復(fù)制代碼 代碼如下:

{server_opts, 80, "127.0.0.1", 10} 

編譯器將Record的名字映射到Tuple里面
Erlang虛擬機(jī)記錄了Record的定義,而編譯器將所有的Record邏輯翻譯為Tuple邏輯
因此,根本就沒有Record類型,所以每次你訪問一個(gè)Record時(shí)你必須告訴Erlang我們?cè)谟媚膫€(gè)Record(為了編譯器爽,程序員變的很不爽)

更新Record

更新Record和創(chuàng)建Record很類似:

復(fù)制代碼 代碼如下:

Opts = #server_opts{port=80, ip="192.168.0.1"}, 
NewOpts = Opts#server_opts{port=7000}. 

這里首先創(chuàng)建一個(gè)server_opts Record

NewOpts = Opts#{port=7000}創(chuàng)建了一個(gè)Opts的副本,并指定port為7000并綁定到NewOpts

匹配Record和Guard語句

不談模式匹配就不算Erlang
讓我們來看看一個(gè)例子:

復(fù)制代碼 代碼如下:

handle(Opts=#server_opts{port=8000}) -> 
  % do special port 8080 stuff 
handle(Opts=#server_opts{} -> 
  % default stuff 

Guard語句和上面的類似,例如綁定小于1024的端口通常需要root權(quán)限,所以我們可以這樣做:
復(fù)制代碼 代碼如下:

handle(Opts) when Opts#server_opts.port = 1024 -> 
  % requires root access 
handle(Opts=#server_opts{}) -> 
  % Doesn't require root access 

使用Record

在我使用Erlang的有限的時(shí)間里,我發(fā)現(xiàn)Record主要用在兩種場(chǎng)景
首先,Record用來保存狀態(tài),特別是在使用gen_server的behaviour時(shí)
由于Erlang不能全局保持狀態(tài),所以狀態(tài)必須在方法之前傳來傳去
然后,Record可以用來保存配置選項(xiàng),這可以認(rèn)為是第一點(diǎn)的子集
盡管如此,Record也有一些限制,最明顯的是不能在運(yùn)行時(shí)添加和刪除field,這和C的struct一樣,Record的結(jié)構(gòu)必須預(yù)先定義
如果你想在運(yùn)行時(shí)添加和刪除field,或者你在運(yùn)行時(shí)才能確定有哪些field,這時(shí)你應(yīng)該使用dict而不是Record

您可能感興趣的文章:
  • Go/Python/Erlang編程語言對(duì)比分析及示例代碼
  • python讀取excel表格生成erlang數(shù)據(jù)
  • Erlang實(shí)現(xiàn)的一個(gè)Web服務(wù)器代碼實(shí)例
  • Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié)
  • CentOS 6.5源碼安裝Erlang教程
  • ERLANG和PYTHON互通實(shí)現(xiàn)過程詳解

標(biāo)簽:廣東 泰安 濟(jì)寧 汕頭 濟(jì)源 安徽 武威 臺(tái)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Erlang中的Record詳解》,本文關(guān)鍵詞  Erlang,中的,Record,詳解,Erlang,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Erlang中的Record詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Erlang中的Record詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 日本亲与子乱XXX| 大地在线影视免费观看| nba在线观看免费观看| 国产AV激情视频在线观看图片| 久久精品这里热有精品| 扒开美女嫩bbb| 欧美另类69xxxxx极品| 97影院理论午夜伦不卡手机版| 日本花色A级播放| 中国一级毛片aa**| 久久久久久99| 日语高清视频在线观看| 国产精品极品白嫩在线播放| 欧美日韩免费一区二区三区| 黄的视频网站| 男男gaygays亚洲中国| 一级爱片| 被c到高潮婬荡呻吟视频| 严厉的出租妻子免费观看电视剧 | 打屁股打到湿调教| 边打电话边被躁在线播放| 久久毛片免费看| 亲嘴扒胸摸屁股免费视频日本网站| 色情欧美一级A片| 99热国产这里只有精品免费 | 久久人精品| 国产成人精品无码免费看点牛影视| 成年片色大黄全免费网址| 男人露j正面撒尿视频| 国产伦理播放一区二区| 国产精品多p对白交换绿帽| 国产精品国产亚洲区艳妇系列短篇| 动漫美女被?奶头吸乳| 狠狠噜噜| 强c亲女的文h| 男人进去女人爽免费视频国产| 欧洲 亚洲 国产 日韩 另类| 国模苏茜1000人体| 嫩水小说| 欧美激情综合色综合啪啪五月| 茄子视频在线免费观看|