0

私は宿題に取り組んでおり、教授が作成したコードを変更しています。残念ながら、彼は現在私には利用できないので、私はスタックオーバーフローの群衆に手を差し伸べています.

このスニペットは、別のクラス「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 関数が呼び出され、期待どおりに機能します。ただし、コンソールからの入力の送信を続行するためのプロンプトが返されません。ピアは基本的に、この時点でハングします。別のプロンプトが表示されることを期待していますが、コンソール ウィンドウは空で、追加の入力は必要ありません。

これがどのように機能するかについての私の理解には明らかに欠陥があります。
私は何を誤解していますか?どうすればこれを意図したとおりに実行できますか?

4

1 に答える 1

0

男優は中出しを待っていPostますreact。それが得られるまで、それは続きません。1つのケースに1つしか送信しないため、そのケースだけが通過します。

他のケースを機能させたい場合は、reactブロックが受信できるメッセージも送信するようにするか (少なくともcase _反応ブロックの内部として)、実際に存在する場合にのみ入力されるように反応ブロックを移動します。あるPost時点で元に戻る。

于 2012-10-12T20:00:20.713 に答える