iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Kestrel.scala中的PersistentQueue是什么
  • 394
分享到

Kestrel.scala中的PersistentQueue是什么

2023-06-17 21:06:39 394人浏览 薄情痞子
摘要

这篇文章主要讲解了“Kestrel.Scala中的PersistentQueue是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kestrel.scala中的PersistentQueu

这篇文章主要讲解了“Kestrel.Scala中的PersistentQueue是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kestrel.scala中的PersistentQueue是什么”吧!

继续走读QueueCollection.scala的代码,因为后面封装的大量方法,都是对queues和fanout_queues的操作,根据定义,这两个变量都是mutable.HashMap[String, XXXX]类型的,所以我们先介绍一下mutable.HashMap的几个在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.

我们发现get和apply在Scala中,是完全相同的功能,但是在get返回值里面的Option究竟是什么意思呢?这个问题从刚开始阅读Scala代码的时候就已经困惑我们很久了。其实查询一下Scala的手册,我们不难发现,这是一个对于NULL的改造,因为在Java里面,有些是面向对象的变量,而有些不是,如果需要在Scala的语言内,保证所有对空的判断是一致的,那么就需要做一点什么。所以Scala设计了Option这个抽象类,以及两个子类Some和None。Option的实例,要么是Some类型,要么是None类型。所以把Option[类型]作为参数传递,也就是把这种类型的空值一并处理了,如果不存在,返回的是None[类型],不需要象apply一样抛出一个异常。

让我们重新读下面这段代码:

private[kestrel] def queue(name: String): Option[PersistentQueue] = synchronized {      ……        Some(queues.get(name) getOrElse {          // only happens when creating a queue for the first time.          val q = if (name contains '+') {            val master = name.split('+')(0)            fanout_queues.getOrElseUpdate(master, new mutable.HashSet[String]) += name            log.info("Fanout queue %s added to %s", name, master)            new PersistentQueue(path.getPath, name, queueConfigs.configMap(master))          } else {            new PersistentQueue(path.getPath, name, queueConfigs.configMap(name))          }          q.setup          queues(name) = q          q        })    ……    }

先不要晕,根据之前对Option的理解,我们知道这是一个被Option封装了的PersistentQueue类。我们也知道了所有的Scala方法都不需要return,***一条执行命令的返回值就是这个方法的返回值,所以,在这里,Some(……)就是整个方法的返回值,很高兴,因为方法对返回值的定义是PersistentQueue,所以我们知道Some括号里面的一定也是PersistentQueue。

Some(queues.get(name) ……),很好,因为queues的定义是mutable.HashMap[String, PersistentQueue],所以get返回的就是Option[PersistentQueue]。这个方法貌似已经写完了,后面的到底是在做什么呢?getOrElse,按照定义,就是如果值不存在,那么就做后面{}里面的事情,这样的写法,其实就是对空值的处理。用QueueCollection角度来看,就是当查询queues的时候,这个队列如果不存在,那么就做{}里面的处理,创建一个队列。这里需要注意的是——这个getOrElse不是HashMap的getOrElse,而是Option的getOrElse。

然后读起来就比较顺利了,创建一个q,是PersistentQueue类型的,把它赋值给queues(name)中,加入HashMap表中。***不要忘记把q作为整个函数的返回,也就是Some()的返回。和get(name)存在的时候一样。

有了queue这个函数作为基础,后面读起来就容易很多了,我们就重点介绍一下match和case的用法,在add方法里面有这么一段代码:

queue(key) match {    case None => false   case Some(q) =>      ……      val result = q.add(item, nORMalizedExpiry)      if (result) totalAdded.incr()      result  }

之前我们知道 queue(key)返回的是Option[PersistentQueue],match就是做匹配,根据不同的匹配来执行不同的操作,None,如果这个queue没有查询到,那么就返回false。Some(q),如果queue返回的是一个Some类型,也就是Option有值的时候的返回,那么这个q就是返回的PersistentQueue类型的那个实例!就像函数的参数一样,可以直接使用。

很惊奇吧,刚接触Scala的时候,我几乎无法相信case可以这样做判断。后来我们发现,之所以能够做这种判断,是因为所有的Scala都是被类封装的,并且基于Scala的基类,实现了一个所谓的case class和case object的抽象类,并且实现了基于类的统一的==操作符。这一连串的改变造就了异常强大的Scala的case语法。

感谢各位的阅读,以上就是“Kestrel.scala中的PersistentQueue是什么”的内容了,经过本文的学习后,相信大家对Kestrel.scala中的PersistentQueue是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Kestrel.scala中的PersistentQueue是什么

本文链接: https://www.lsjlt.com/news/293343.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Kestrel.scala中的PersistentQueue是什么
    这篇文章主要讲解了“Kestrel.scala中的PersistentQueue是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kestrel.scala中的PersistentQueu...
    99+
    2023-06-17
  • javascript中的$是什么
    本篇内容主要讲解“javascript中的$是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript中的$是什么”吧! ...
    99+
    2022-10-19
  • JDBC中的PreparedStatement是什么
    JDBC中的PreparedStatement是一种数据库预编译的SQL语句对象。它继承自Statement接口,用于执行带有参数的...
    99+
    2023-10-10
    JDBC
  • JDBC 中的 CallableStatement 是什么
    JDBC中的CallableStatement是用于调用存储过程或函数的接口。CallableStatement继承自Prepare...
    99+
    2023-10-10
    JDBC
  • Python中的f是什么?
    Python中的f是什么? 在Python中,f是格式化字符串的前缀。它用于创建格式化字符串,其中可以插入变量和表达式的值。f字符串是Python 3.6引入的一种新的字符串格式化方法,它提供了一种简...
    99+
    2023-10-11
    python java linux Python
  • JDBC 中的 CallableStatement 是什么?
    CallableStatement 接口提供执行存储过程的方法。由于 JDBC API 提供了存储过程 SQL 转义语法,因此您可以以单一标准方式调用所有 RDBMS 的存储过程。创建 CallableStatement您可以创建 Conn...
    99+
    2023-10-22
  • JDBC中的PreparedStatement是什么?
    PreparedStatement接口扩展了Statement接口,它代表一个可以多次执行的预编译SQL语句。它接受参数化 SQL 查询,并且您可以向此查询传递 0 个或多个参数。最初此语句使用占位符 “” 而不是参数,稍后您可以传递参数使...
    99+
    2023-10-22
  • git中的gui是什么
    Git GUI 是一种图形用户界面,它可以帮助开发人员更好地管理和控制他们的 Git 代码库。Git 是一种版本控制系统,它能够帮助开发者管理代码版本,跟踪代码更改以及在团队协作开发中更好地协调工作。Git 版本控制工具广泛应用于开源代码库...
    99+
    2023-10-22
  • JavaScript中的JSON是什么
    JavaScript中的JSON是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。javascript是一种什么语言javascript是一种动态类型、弱类型...
    99+
    2023-06-14
  • python中的@property是什么
    这篇文章主要讲解了“python中的@property是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的@property是什么”吧! 说明内置的@propert...
    99+
    2023-06-20
  • golang中的bee是什么
    golang中的bee是指一个协助快速开发beego项目的工具,通过bee工具您可以很容易的进行beego项目的创建、热编译、开发、测试以及部署工作,安装完bee工具后,需要将“$GOPATH”添加到环境变量中。本教程操作环境:window...
    99+
    2023-07-10
  • linux中的rpm是什么
    本篇内容介绍了“linux中的rpm是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在linux中,rpm全称“Red Hat Pack...
    99+
    2023-06-25
  • php中intval的是什么
    这篇文章主要讲解了“php中intval的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中intval的是什么”吧!在php中,intval的意思为获取变量的整数值,是一个可以将...
    99+
    2023-06-25
  • Linux中的semaphore是什么
    这篇文章给大家分享的是有关Linux中的semaphore是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Semaphore 通常我们叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以...
    99+
    2023-06-28
  • html中的align是什么
    html中的align是用于指定元素在容器中的对齐方式,其属性值有left、right、center和justify。详细介绍:1、left,元素将会在容器中左对齐;2、right,元素将会在容器中右对齐;3、元素将会在容器中居中对齐;4、...
    99+
    2023-08-10
  • MySQL中的锁是什么?
    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许...
    99+
    2022-10-18
  • mysql中的innodb是什么
    mysql中的innodb是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。innodb简介InnoDB,是MySQL的数据库引擎之一,...
    99+
    2022-10-18
  • mysql中的myisam是什么
    mysql中的myisam是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。myisam介绍MyISAM是默认存储引擎(Mysql5.1...
    99+
    2022-10-18
  • mysql中的engine是什么
    今天就跟大家聊聊有关mysql中的engine,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。mysql engine表示存储引擎,存储引擎是MySQ...
    99+
    2022-10-18
  • mysql中的char是什么
    这篇文章将为大家详细讲解有关mysql中的char,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。char简介在MYSQL中,字段类型char是指:使用指定长度的固定长度表...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作