加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala演员如何返回响应消息的值?

发布时间:2020-12-16 09:20:07 所属栏目:安全 来源:网络整理
导读:有很多演员回复给发送者回复另一个消息的示例,但是浏览API文档时我注意到了!和!作为CanReply特征的一部分(这似乎是2.8: http://www.scala-lang.org/archives/rc-api/scala/actors/CanReply.html的新增)的运算符.因此,我想知道是否只是使接收/反应块返回值
有很多演员回复给发送者回复另一个消息的示例,但是浏览API文档时我注意到了!和!作为CanReply特征的一部分(这似乎是2.8: http://www.scala-lang.org/archives/rc-api/scala/actors/CanReply.html的新增)的运算符.因此,我想知道是否只是使接收/反应块返回值的情况,即将PartialFunction返回类型为Unit以外的其他值?

我将开始挖掘来源,试图弄清楚它们是如何被使用的,但如果任何人有任何洞察力或者知道更深入的文档或例子,那么我将非常感激.

干杯,
保罗.

解决方法

回复可以通过方法回复发送,如下所示:

import scala.actors._
class Reverser extends Actor {
  def act() { Actor.loop { react {
    case s: String => Thread.sleep(1000); reply(s.reverse)
    case _ => exit()
  }}}
}

有三种方式来明确地接受答复.

>使用!!,它返回一个未来,这是一个容器类,承诺在需要的时候给你内容.它立即返回,但是如果您真的要求内容,则必须等到另一个线程完成并填满该请求.
>使用!没有超时.您的代码将暂停,只要其他线程需要回复.
>使用!超时.您的代码将暂停,直到它得到回复或直到超时到期,以先到者为准.

以下是三个例子:

val r = new Reverser
r.start
val a = (r !! "Hi")
a() match {
  case s: String => println(s)
  case _ => println("Error A")
}
val b = r !? "Hello"
b match {
  case s: String => println(s)
  case _ => println("Error B")
}
val c = (r !? (500,"Howdy"))
c match {
  case Some(s: String) => println(s)
  case Some(_) => println("Error C")
  case None => println("Too slow!")
}
r ! None  // None isn't a string,so r will stop running

如果你运行这个,你会得到

iH
elloH
Too slow!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读