制御構造 | 目次 |
Reactor
トレイトは戻り値を返さない react
演算のプログラミングを簡略化する制御構造を定義する。通常は、react
の呼び出しは戻ってこない。もしアクターが続いてコードを実行したければ、アクターの継続コードを明示的に react
に渡すか、継続を隠蔽する以下の制御構造を使わなければいけない。
最も基礎的な制御構造は andThen
だ。これは、アクターが他の全てを実行した後で実行されるべきクロージャを登録する。
actor { { react { case "おはよう" => // processing "おはよう" }: Unit } andThen { println("あ、おはようございます") } }
具体例で説明すると、上記のアクターは "おはよう"
メッセージを処理した後、挨拶を表示する。react
の呼び出しは戻ってこないが、andThen
を用いて挨拶を表示する継続を登録することができた。
react
の呼び出しに続いて「みなし型」(type ascription) が指定されることに注意してほしい(: Unit
)。 これにより、react
の戻り値型が Unit
であるとみなすことができる。式の結果はいつでも外すことができるので、これは合法だ。andThen
が react
の戻り値型である Nothing
のメンバーになれないため、このような記述が必要になる。react
の戻り値型を Unit
とみなすことで暗黙の変換 (implicit conversion) が適用され、andThen
をメンバーとすることができる。
アクター API は他にもいくつかの制御構造を提供する:
loop { ... }
。中括弧で囲まれたコードを毎回実行するループを永久に周回する。ループの本文内で react
を呼び出すとアクターは通常通りメッセージを処理することができる。その後、アクターの実行は同じループの次の周回へと続行する。loopWhile (c) { ... }
。条件 c
が true
を返す間、中括弧で囲まれたコードを実行する。ループの本文内での react
の呼び出しは loop
内で呼んだ場合と同じ結果になる。continue
。現在の継続クロージャを用いてアクターの実行を続行する。 loop
または loopWhile
内で continue
を呼び出すと、アクターは現在の周回を終え、次の周回へと続行する。 現在の継続が andThen
を用いて登録された場合は、アクターの実行は andThen
の第二引数に渡されたクロージャに続行する。制御構造は Reactor
の act
メソッドの本文内、もしくは act
により(直接、または間接的に)呼び出されたメソッドの本文内ならどこでも使うことができる。actor { ... }
記法により作成されたアクターは、制御構造を Actor
からインポートする必要がある。
制御構造 | 目次 |