pdb*_*ett 14 scala scala-2.8 actor
有很多演员回复发件人回复另一条消息的例子,但在浏览API文档时我发现了!! 和!?运营商是CanReply特征的一部分(似乎是2.8的新成员:http://www.scala-lang.org/archives/rc-api/scala/actors/CanReply.html).因此,我想知道是否只是让接收/反应块返回一个值,即使PartialFunction返回类型而不是Unit?
我将开始深入挖掘源代码,试图找出它们的用途,但如果有人有任何见解或知道任何更深入的文档或示例,那么我将非常感激.
干杯,保罗.
Rex*_*err 22
可以使用该方法发送回复reply,如下所示:
import scala.actors._
class Reverser extends Actor {
def act() { Actor.loop { react {
case s: String => Thread.sleep(1000); reply(s.reverse)
case _ => exit()
}}}
}
Run Code Online (Sandbox Code Playgroud)
有三种方法可以明确接受回复.
!!,返回a Future,这是一个容器类,承诺在需要时为您提供内容.它立即返回,但如果您确实要求内容,则必须等到另一个线程完成并填写请求.!?没有超时.只要另一个线程回复,您的代码就会暂停.!?超时.您的代码将暂停,直到收到回复或超时到期为止,以先到者为准.以下是这三个例子:
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
Run Code Online (Sandbox Code Playgroud)
如果你运行这个你得到
iH
elloH
Too slow!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5751 次 |
| 最近记录: |