我正在做家庭作业,修改我教授创建的代码。不幸的是,他目前无法使用我所以我正在接触到stackoverflow人群。
此片段来自文件“Peer.scala”,该文件与另一个类“RemoteActorChat.scala”中的actor进行通信。为了简洁起见,我只包含了我认为是问题原因的片段。如果其余的代码在查找解决方案时很有用,我很乐意发布它。
我的目的是在连续循环中从控制台获取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)取消订阅或订阅函数被调用并按预期执行它们的操作。但是,我没有收到提示,继续从控制台发送输入。同伴基本上只是挂起了这一点。我期待另一个提示,但控制台窗口只是空的,不需要任何额外的输入。
显然,我对这应该如何运作的理解是有缺陷的 我误解了什么,我怎么能按照我的意愿做到这一点?
答案 0 :(得分:0)
演员正在等待Post
内的react
。它会一直持续下去。由于您只发送一个案例,所以只有这种情况可以通过。
如果你想让其他案例有效,或者让他们发送react
块可以接收的消息(至少作为反应块内的case _
),或移动反应阻止所以只有当Post
在某个时刻回来时才会输入。