国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Kestrel.scala中的PersistentQueue

開發(fā) 后端
本文介紹Kestrel中的PersistentQueue,后面還重點(diǎn)介紹了一下Scala中的match和case的用法。

上一篇講到Kestrel.scala中的QueueCollection,下面將介紹PersistentQueue。

繼續(xù)走讀QueueCollection.scala的代碼,因?yàn)楹竺娣庋b的大量方法,都是對queues和fanout_queues的操作,根據(jù)定義,這兩個(gè)變量都是mutable.HashMap[String, XXXX]類型的,所以我們先介紹一下mutable.HashMap的幾個(gè)在Java中陌生的方法:( scala 的 apidoc 在 http://www.scala-lang.org/docu/files/api/index.html 可以查到)

◆apply (key : A) : B

◆Retrieve the value which is associated with the given key. This method throws an exception if there is no mapping from the given key to a value.

◆get (key : A) : Option[B]

◆Check if this map maps key to a value and return the value if it exists.

◆getOrElse [B2 >: B](key : A, default : => B2) : B2

◆Check if this map maps key to a value. Return that value if it exists, otherwise return default.

◆getOrElseUpdate (key : A, default : => B) : B

◆Check if this map maps key to a value. Return that value if it exists, otherwise put default as that key’s value and return it.

#t#我們發(fā)現(xiàn)get和apply在Scala中,是完全相同的功能,但是在get返回值里面的Option究竟是什么意思呢?這個(gè)問題從剛開始閱讀Scala代碼的時(shí)候就已經(jīng)困惑我們很久了。其實(shí)查詢一下Scala的手冊,我們不難發(fā)現(xiàn),這是一個(gè)對于NULL的改造,因?yàn)樵贘ava里面,有些是面向?qū)ο蟮淖兞浚行┎皇牵绻枰赟cala的語言內(nèi),保證所有對空的判斷是一致的,那么就需要做一點(diǎn)什么。所以Scala設(shè)計(jì)了Option這個(gè)抽象類,以及兩個(gè)子類Some和None。Option的實(shí)例,要么是Some類型,要么是None類型。所以把Option[類型]作為參數(shù)傳遞,也就是把這種類型的空值一并處理了,如果不存在,返回的是None[類型],不需要象apply一樣拋出一個(gè)異常。

讓我們重新讀下面這段代碼:

  1. private[kestrel] def queue(name: String): Option[PersistentQueue] = synchronized {  
  2.     ……  
  3.       Some(queues.get(name) getOrElse {  
  4.         // only happens when creating a queue for the first time.  
  5.         val q = if (name contains '+') {  
  6.           val master = name.split('+')(0)  
  7.           fanout_queues.getOrElseUpdate(master, new mutable.HashSet[String]) += name  
  8.           log.info("Fanout queue %s added to %s", name, master)  
  9.           new PersistentQueue(path.getPath, name, queueConfigs.configMap(master))  
  10.         } else {  
  11.           new PersistentQueue(path.getPath, name, queueConfigs.configMap(name))  
  12.         }  
  13.         q.setup  
  14.         queues(name) = q  
  15.         q  
  16.       })  
  17.   ……  
  18.   }  

先不要暈,根據(jù)之前對Option的理解,我們知道這是一個(gè)被Option封裝了的PersistentQueue類。我們也知道了所有的Scala方法都不需要return,***一條執(zhí)行命令的返回值就是這個(gè)方法的返回值,所以,在這里,Some(……)就是整個(gè)方法的返回值,很高興,因?yàn)榉椒▽Ψ祷刂档亩x是PersistentQueue,所以我們知道Some括號里面的一定也是PersistentQueue。

Some(queues.get(name) ……),很好,因?yàn)閝ueues的定義是mutable.HashMap[String, PersistentQueue],所以get返回的就是Option[PersistentQueue]。這個(gè)方法貌似已經(jīng)寫完了,后面的到底是在做什么呢?getOrElse,按照定義,就是如果值不存在,那么就做后面{}里面的事情,這樣的寫法,其實(shí)就是對空值的處理。用QueueCollection角度來看,就是當(dāng)查詢queues的時(shí)候,這個(gè)隊(duì)列如果不存在,那么就做{}里面的處理,創(chuàng)建一個(gè)隊(duì)列。這里需要注意的是——這個(gè)getOrElse不是HashMap的getOrElse,而是Option的getOrElse。

然后讀起來就比較順利了,創(chuàng)建一個(gè)q,是PersistentQueue類型的,把它賦值給queues(name)中,加入HashMap表中。***不要忘記把q作為整個(gè)函數(shù)的返回,也就是Some()的返回。和get(name)存在的時(shí)候一樣。

有了queue這個(gè)函數(shù)作為基礎(chǔ),后面讀起來就容易很多了,我們就重點(diǎn)介紹一下match和case的用法,在add方法里面有這么一段代碼:

  1. queue(key) match {  
  2.   case None => false 
  3.   case Some(q) =>  
  4.     ……  
  5.     val result = q.add(item, normalizedExpiry)  
  6.     if (result) totalAdded.incr()  
  7.     result  
  8. }  

之前我們知道 queue(key)返回的是Option[PersistentQueue],match就是做匹配,根據(jù)不同的匹配來執(zhí)行不同的操作,None,如果這個(gè)queue沒有查詢到,那么就返回false。Some(q),如果queue返回的是一個(gè)Some類型,也就是Option有值的時(shí)候的返回,那么這個(gè)q就是返回的PersistentQueue類型的那個(gè)實(shí)例!就像函數(shù)的參數(shù)一樣,可以直接使用。

很驚奇吧,剛接觸Scala的時(shí)候,我?guī)缀鯚o法相信case可以這樣做判斷。后來我們發(fā)現(xiàn),之所以能夠做這種判斷,是因?yàn)樗械腟cala都是被類封裝的,并且基于Scala的基類,實(shí)現(xiàn)了一個(gè)所謂的case class和case object的抽象類,并且實(shí)現(xiàn)了基于類的統(tǒng)一的==操作符。這一連串的改變造就了異常強(qiáng)大的Scala的case語法。

至于match…case還能怎么用,參考這個(gè)鏈接 http://programming-scala.labs.oreilly.com/ch03.html#PatternMatching

【編輯推薦】

  1. 走讀Kestrel,了解Scala
  2. Kestrel.scala中的QueueCollection
  3. 從Kestrel看Scala的核心程序模塊
  4. Scala實(shí)例教程:Kestrel
  5. Scala編程語言
責(zé)任編輯:yangsai 來源: dingsding.com
相關(guān)推薦

2009-09-28 11:25:17

PersistentQKestrelScala

2009-09-22 09:59:40

QueueCollecScala

2009-09-28 11:37:03

Journal.scaKestrel

2009-09-18 11:44:05

Scala實(shí)例教程Kestrel

2009-09-28 11:42:21

KestrelScala

2009-09-28 10:26:12

Scala代碼實(shí)例Kestrel

2009-09-22 09:42:24

Scala的核心

2009-07-22 07:53:00

Scala擴(kuò)展類

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:45:00

Scala代碼重復(fù)

2009-07-21 17:21:57

Scala定義函數(shù)

2023-06-12 15:33:52

Scalafor循環(huán)語句

2009-07-08 12:43:59

Scala ServlScala語言

2020-10-31 17:33:18

Scala語言函數(shù)

2010-09-14 15:34:41

Scala

2009-07-22 08:57:49

Scalafinal

2009-07-21 11:25:03

ScalaRational類

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2017-03-07 15:13:28

Scala偏函數(shù)函數(shù)

2009-07-20 18:03:26

Scala程序Singleton對象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产亚洲第一伦理第一区| 影音先锋久久久| 日韩欧美第一页| 久久久久久av无码免费网站下载| 91亚洲无吗| 欧美剧情片在线观看| 国产真人无码作爱视频免费| 亚洲国产一区二区精品专区| 久久久免费电影| heyzo在线| 黑人精品xxx一区| 丰满少妇在线观看| 免费成人你懂的| 51国偷自产一区二区三区的来源| 不卡亚洲精品| 欧美不卡一区二区三区四区| 福利在线国产| 欧美国产1区2区| 国产精品无码免费专区午夜| 在线欧美视频| 国产免费亚洲高清| 牛牛精品成人免费视频| 国产一区二区三区在线播放免费观看| 懂色一区二区三区| 精品国产乱码久久久久久天美 | 国产欧美1区2区3区| 黄瓜视频免费观看在线观看www| 亚洲九九在线| 国产精品视频久久久| 狠狠一区二区三区| 欧美黄色小视频| 日本伊人久久| 欧美成人sm免费视频| 91亚洲精品| 色诱女教师一区二区三区| 一呦二呦三呦精品国产| 亚洲护士老师的毛茸茸最新章节| 黄色网页在线观看| 欧美一区二区三区系列电影| 色网站免费在线观看| 日本韩国一区二区| www视频在线观看免费| 91国产丝袜在线播放| 亚洲有码转帖| 在线精品小视频| 3d动漫啪啪精品一区二区免费| 免费av网页| 一区二区三区韩国免费中文网站| 国产一区二区三区久久久| 久久久久资源| 美女高潮在线观看| 欧美激情亚洲精品| 中文字幕区一区二区三| 国产精品一区二区你懂得| 国产偷v国产偷v亚洲高清| 黄色一级大片在线免费看产| 欧美日本在线视频中文字字幕| 久久久久国产精品| 国产一区二区三区小说| 宅男噜噜噜66一区二区66| 99re在线视频| 久久精品人人做人人综合 | 日韩一区二区免费视频| 91精品啪aⅴ在线观看国产| 国产粉嫩一区二区三区在线观看| 国产成人精品亚洲日本在线桃色| 国产午夜精品一区二区三区| 国产午夜大地久久| 国产欧美一级| 国产欧美在线视频| 色婷婷在线播放| 亚洲不卡一区二区三区| www.99在线| 黄色小视频在线播放| 亚洲精品国产一区二区精华液| 草草久视频在线观看电影资源| 亚洲美女视频在线观看| 色猫av在线| 日韩国产精品亚洲а∨天堂免| 日本韩国欧美| 亚州欧美日韩中文视频| 亚洲九九在线| 一本色道久久88亚洲精品综合| 久久夜色精品国产欧美乱极品| 在线观看视频免费| 精品三级av在线| 亚洲视频一起| 国产91aaa| 91片在线免费观看| 内衣办公室在线| 日韩精品免费视频| 久久久久观看| 久久综合入口| 国产日韩欧美制服另类| 91在线网站| 亚洲精品美女网站| 香蕉久久夜色精品国产更新时间| 国产综合色一区二区三区| 99麻豆久久久国产精品免费优播| 国产在线导航| 亚洲欧美日韩一区在线| 精品久久影视| 日韩精品久久一区二区| 亚洲v日本v欧美v久久精品| 国产盗摄在线视频网站| 青青草一区二区| 黄色资源网久久资源365| a天堂中文在线官网| 国产一区二区三区18| 中文字幕人成人乱码| 妞干网在线观看视频| 在线观看日韩国产| 视频精品国内| 日韩精品大片| 亚洲一区二区三区四区在线观看| 深夜在线视频| 成人h视频在线观看| 欧美高清在线精品一区| av2020不卡| 久久久加勒比| 国产精品亚洲片夜色在线| 日韩不卡一区二区三区| 天天干天天草天天| 五月天欧美精品| 你懂的视频在线播放| 精品香蕉在线观看视频一| 99久久精品费精品国产| 成人午夜视频免费观看| 韩国欧美一区二区| 免费国产在线观看| 欧美成人一二三| 日本va欧美va精品发布| 青春草在线观看 | 久久99国产精品一区| 色欧美乱欧美15图片| 琪琪久久久久日韩精品| 桥本有菜av在线| 日韩欧美高清一区| 亚洲国产mv| 成人在线高清视频| 91亚洲午夜在线| 天涯成人国产亚洲精品一区av| 全国精品免费看| 亚洲另类第一页| 欧美激情国产日韩精品一区18| 国产98色在线|日韩| 悠悠资源网亚洲青| 国产精品一区在线免费观看| 欧美精品一区二区蜜臀亚洲| 久久久成人网| 污污片在线免费视频| 欧美日韩免费精品| 欧美一区二区美女| 天堂一区二区在线| 天堂成人av| 一区二区不卡在线| 亚洲精品一区av在线播放| 久久国产日韩欧美精品| 七七成人影院| 国产内射老熟女aaaa| 中文欧美日本在线资源| 不卡在线观看av| 精品国产一区二区三区2021| 欧美 丝袜 自拍 制服 另类| 尤物yw午夜国产精品视频明星| 国产宾馆实践打屁股91| 亚洲欧美在线综合| 九九热在线免费| 日本午夜人人精品| 日韩欧美在线视频免费观看| 欧美理论在线| 麻豆最新免费在线视频| 亚洲精品欧美精品| 中文字幕精品www乱入免费视频| 不卡av在线免费观看| 日韩欧美久久| 草莓污污视频在线观看| aa日韩免费精品视频一| 欧美xxxxxxxx| 99久久国产综合精品色伊| 高清日韩中文字幕| 一级毛片在线看| 亚洲国产一区二区三区在线| 亚洲色图15p| 亚洲图片激情小说| 欧美日韩国产在线一区| 91超碰国产在线| 一区二区三区国产免费| 国产精品盗摄久久久| 欧美日韩一区久久| 精品一区二区三区在线观看| 粉嫩一区二区三区在线看| 水野朝阳av一区二区三区| 亚洲精品资源| 桃花岛成人影院| 中文字幕一区二区三区域| 91成人在线免费观看| 天堂av在线一区| 日韩电视剧免费观看网站| 91蜜臀精品国产自偷在线|