我正在做家庭作業,修改由我的教授創建的代碼。不幸的是,他目前無法提供給我,所以我正在接觸到大量人羣。爲什麼這個循環的循環部分不會按照我所期望的方式「循環」?
該片段來自一個文件「Peer.scala」,該文件與另一個類「RemoteActorChat.scala」中的actor進行通信。爲了簡潔起見,我只包括了我認爲是我的問題的原因的片段。如果其他代碼在尋找解決方案時很有用,我會很樂意發佈它。
我的意圖是讓對端捕獲來自控制檯的輸入連續循環,同時對來自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與「取消訂閱」,「訂閱」或「?」匹配時,行爲會有所不同。該案件中的陳述被執行IE)取消訂閱或訂閱功能被調用並按預期執行他們的事情。但是,我沒有得到提示,繼續從控制檯發送輸入。同行基本上只是掛在這一點上。我期待另一個提示,但控制檯窗口只是空的,並沒有任何額外的輸入。
很明顯,我對如何工作的理解是有缺陷的。
我誤解了什麼,我該如何讓它做我想要的?
有效的解決方案是讓textInput匹配個案發送消息「取消訂閱」「訂閱」和「?」自己,然後將這三個案件添加到反應部分? – NickAbbey
@NickAbbey - 我不確定「有效」是什麼意思,但它會編譯並給你重複的提示。但是,您可能還會注意到,每條命令只能獲得一條消息,如果這確實用於消息傳遞,那麼您可能希望看到_all_帖子,而不是每次輸入一行文本時都會發布一條消息。所以作爲一個聊天室很有用,它需要一些重大的改進。 –
那麼......現在我認爲「有效」意味着「將編譯並給出重複提示」,因爲這只是一項家庭作業,而不是真實世界部署的意義。 – NickAbbey