私は宿題に取り組んでおり、教授が作成したコードを変更しています。残念ながら、彼は現在私には利用できないので、私はスタックオーバーフローの群衆に手を差し伸べています.
このスニペットは、別のクラス「RemoteActorChat.scala」のアクターと通信するファイル「Peer.scala」からのものです。簡潔にするために、問題の原因であると思われるスニペットのみを含めました。コードの残りの部分が解決策を見つけるのに役立つ場合は、喜んで投稿します。
私の意図は、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 関数が呼び出され、それが実行され、別のプロンプトが表示されます。必要に応じて、このように 1 日中メッセージを投稿できます。
ただし、inputText が「Unsubscribe」、「Subscribe」、または「?」に一致する場合は、動作が異なります。ケース内のステートメントが実行されます IE) unsubscribe または subscribe 関数が呼び出され、期待どおりに機能します。ただし、コンソールからの入力の送信を続行するためのプロンプトが返されません。ピアは基本的に、この時点でハングします。別のプロンプトが表示されることを期待していますが、コンソール ウィンドウは空で、追加の入力は必要ありません。
これがどのように機能するかについての私の理解には明らかに欠陥があります。
私は何を誤解していますか?どうすればこれを意図したとおりに実行できますか?