最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Erlang中的Record詳解

 更新時間:2015年04月29日 10:21:54   投稿:junjie  
這篇文章主要介紹了Erlang中的Record詳解,本文講解了定義Record、創(chuàng)建Record、訪問Record、更新Record、匹配Record和Guard語句、使用Record等內容,需要的朋友可以參考下

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

在Ruby中我可以這樣做:

復制代碼 代碼如下:

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

在Erlang的語法級別不支持這種表達

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

定義Record

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

復制代碼 代碼如下:

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

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

創(chuàng)建Record

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

復制代碼 代碼如下:

Opts1 = #server_opts{port=80}. 

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

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

簡而言之,當創(chuàng)建一個Record時,你可以包含任何field,省略的field將使用默認值

訪問Record

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

復制代碼 代碼如下:

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

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

在內部,Record是Tuple,如下:

復制代碼 代碼如下:

{server_opts, 80, "127.0.0.1", 10} 

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

更新Record

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

復制代碼 代碼如下:

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

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

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

匹配Record和Guard語句

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

復制代碼 代碼如下:

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

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

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

使用Record

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

相關文章

  • Erlang編程語言的第一印象

    Erlang編程語言的第一印象

    這篇文章主要介紹了Erlang編程語言的第一印象,本文對Erlang做了一個簡單總結,需要的朋友可以參考下
    2015-03-03
  • Erlang中的函數(shù)與流程控制介紹

    Erlang中的函數(shù)與流程控制介紹

    這篇文章主要介紹了Erlang中的函數(shù)與流程控制介紹,本文先是講解了函數(shù)的一些知識,然后講解了case語句和if語句及算術表達式等內容,需要的朋友可以參考下
    2015-01-01
  • Erlang分布式節(jié)點中的注冊進程使用實例

    Erlang分布式節(jié)點中的注冊進程使用實例

    這篇文章主要介紹了Erlang分布式節(jié)點中的注冊進程使用實例,本文直接給出實例代碼,需要的朋友可以參考下
    2015-02-02
  • Erlang初學:Erlang的一些特點和個人理解總結

    Erlang初學:Erlang的一些特點和個人理解總結

    這篇文章主要介紹了Erlang初學:Erlang的一些特點和個人理解總結,本文總結了函數(shù)式編程、一切都是常量、輕量進程、進程端口映射及典型缺點等內容,需要的朋友可以參考下
    2015-02-02
  • 一篇文章帶你從入門到精通:RabbitMQ

    一篇文章帶你從入門到精通:RabbitMQ

    RabbitMQ是實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,所有主要的編程語言均有與代理接口通訊的客戶端庫
    2021-06-06
  • Erlang程序設計(第2版)讀書筆記:Erlang安裝和基礎語法

    Erlang程序設計(第2版)讀書筆記:Erlang安裝和基礎語法

    這篇文章主要介紹了Erlang程序設計(第2版)讀書筆記:Erlang安裝和基礎語法,需要的朋友可以參考下
    2015-02-02
  • Erlang中遍歷取出某個位置的最大值代碼

    Erlang中遍歷取出某個位置的最大值代碼

    這篇文章主要介紹了Erlang中遍歷取出某個位置的最大值代碼,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • Erlang實現(xiàn)的百度云推送Android服務端實例

    Erlang實現(xiàn)的百度云推送Android服務端實例

    這篇文章主要介紹了Erlang實現(xiàn)的百度云推送Android服務端實例,本文先是講解了實現(xiàn)步驟,然后給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-01-01
  • Erlang的一些編程技巧分享

    Erlang的一些編程技巧分享

    這篇文章主要介紹了Erlang的一些編程技巧分享,本文是是實際編程中的個人總結,需要的朋友可以參考下
    2015-01-01
  • Erlang中的OTP簡介

    Erlang中的OTP簡介

    這篇文章主要介紹了Erlang中的OTP簡介,OTP包含了一組庫和實現(xiàn)方式,可以構建大規(guī)模、容錯和分布式的應用程序,包含了許多強大的工具,能夠實現(xiàn)H248,SNMP等多種協(xié)議,需要的朋友可以參考下
    2015-03-03

最新評論

洪洞县| 雅安市| 成都市| 五家渠市| 房产| 珠海市| 太湖县| 仁化县| 白银市| 广南县| 浏阳市| 永年县| 丰宁| 浠水县| 乌拉特后旗| 抚州市| 色达县| 建宁县| 沅江市| 锦州市| 高邑县| 新干县| 溧阳市| 兴文县| 德州市| 班戈县| 磴口县| 抚松县| 仁怀市| 青田县| 马尔康县| 荔浦县| 蕲春县| 宁南县| 康定县| 林甸县| 郸城县| 八宿县| 苏尼特右旗| 云梦县| 会昌县|