ページ

2012-12-23

Scalaでキー入力に応じてプログラムを終了させたりする


Scalaっぽいのか?


なんかずっと処理をするスレッドを起動して、メインスレッドではユーザからの終了指示待ちって状況はよくあると思います。

具体的には、TwitterのStreaming APIを使ってずっと処理をしていて、止めたいと思った時に止めさせるとか。

そんな状況が今日発生しました。

僕が普段Javaとかでよくやる手はwhile(true)ってやって無限ループの中で入力待ちして、その中でbreakとかやります。

でも今日はScalaです。

無限ループしてbreakするとかはScalaっぽくないと思ったので下のようにしました。
object WaitInput extends App {
/* 別のThreadで何か処理をするタスクを起動 */
/* q↓が入力されるまで永遠に待ち続ける関数 */
def waitInput(c:Char) : Unit = {
c match {
case 'q' => /* 終了処理 */
case _ => waitInput(readChar) /* 他のキーだったら再び入力待ち */
}
}
/* 入力待ちする */
waitInput(readChar)
}
view raw WaitInput.scala hosted with ❤ by GitHub
もっといい方法があるのかもしれません。

0 件のコメント:

コメントを投稿