0

我正在做一个家庭作业,修改我的教授创建的代码。不幸的是,他目前对我不可用,所以我正在与 stackoverflow 人群联系。

此片段来自文件“Peer.scala”,该文件与来自另一个类“RemoteActorChat.scala”的演员进行通信。为了简洁起见,我只包含了我认为是问题原因的片段。如果其余代码对找到解决方案有用,我会很乐意发布它。

我的意图是让 Peer 在连续循环中从控制台捕获输入,同时对从 RemoteChatActor 接收到的任何消息做出反应。

...

def act {
...
loop {
  val textInput = Console.readLine(name + ">").toString()
  textInput match {
    case "Unsubscribe" =>
      unsubscribe

    case "Subscribe" =>
      subscribe(name))

    case "?" =>
      println("Type any message to send it to the chatroom")
      println("Type 'Unsubscribe' (without quotes) to leave the chatroom")
      println("Type 'Subscribe' (without quotes) to re-join the chatroom")

    case _ =>
      post(textInput)
  }

  react {
    case Post(msg) =>
      println(name + " got a post = " + msg)
  }
}

}

...

当 inputText 与 _ 匹配时,调用 post 函数,是不是这样,我得到另一个提示。如果我愿意,我可以像这样整天发布消息。

但是,当 inputText 与“Unsubscribe”、“Subscribe”或“?”匹配时,行为是不同的。案例中的语句被执行 IE)取消订阅或订阅函数被调用并按预期做他们的事情。但是,我没有收到继续从控制台发送输入的提示。对等点基本上只是在这一点上挂起。我期待另一个提示,但控制台窗口只是空的,不接受任何额外的输入。

显然,我对这应该如何工作的理解是有缺陷的。
我有什么误解,我怎样才能做到我想要的?

4

1 回答 1

0

演员正在等待一个Post内幕react。它不会继续,直到它得到一个。由于您只发送一个案例,因此只有该案例才能通过。

如果你想让其他情况正常工作,要么让他们也发送一个react块可以接收的消息(至少作为case _反应块内部的一个),或者移动反应块,这样只有在实际上有的情况下才会输入在某个Post时候回来。

于 2012-10-12T20:00:20.713 回答