关于如何使用阻挡演员的指导?

时间:2012-03-20 17:24:57

标签: scala actor

我很难找到解释如何使用!?运算符向Scala中的actor发送阻止消息的示例,博客等。当我(天真地)尝试简单地使用它时,期望它阻塞直到演员已经对该消息进行操作,该线程就会阻塞。例如

scala> :paste
// Entering paste mode (ctrl-D to finish)

class A extends Actor {
  def act {
    loop {
      react {
        case 5 => println("hello")
      }
    }
  }
}

// Exiting paste mode, now interpreting.

defined class A

scala> val a = new A
a: A = A@10115870

scala> a.start
res5: scala.actors.Actor = A@10115870

scala> a !? 5
hello
Execution interrupted by signal. // I just pressed Ctrl+C 

我在我的Scala编程版中找不到任何内容,我可能只是愚蠢,但是有人能指出我正确的方向吗?

从我可以从API文档中收集到的内容,我需要阻塞actor将消息发送回调用者?但是呼叫者如何以及在何处收到此消息?任何链接到示例等将不胜感激。不幸的是,谷歌搜索!?的帮助不大。

1 个答案:

答案 0 :(得分:4)

发件人收到邮件作为!?的返回值。所以

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.actors.Actor._
class A extends Actor {
  def act {
    loop {
      react {
        case 5 => println("hello"); reply(0)
      }
    }
  }
}

// Exiting paste mode, now interpreting.

defined class A

scala> val a = new A
a: A = A@10115870

scala> a.start
res5: scala.actors.Actor = A@10115870

scala> a !? 5
hello
res6: Any = 0