2

アクター本体では、react() メソッドを loop() メソッド内に記述する必要があります。このループ方法が「for」または「while」ループとどのように違うのか知りたいですか?

GPars のドキュメントには、「loop() は、ネストされた react() ブロックと連携し、後続のメッセージ取得で確実にループする」と記載されています。私はこれを正確に理解していません。私の理解によると、ループメソッドに提供するクロージャは、無限に何度も実行されます。それでは、ネストされた react() ブロックとの調整についてはどうすればよいでしょうか?

4

2 に答える 2

4

昨年の DrDobbs の記事(1 ページの下部と 2 ページの最初) に適切な説明があると思います。

基本的に、この種のことを継続をモデル化するために行うことができます(1ページの下部から):

def actor = actor {
    loop {
        log 'Waiting for a gift'
        react {gift ->
            if (myWife.likes gift) reply 'Thank you!'
            else {
                reply 'Try again, please'
                react {anotherGift ->
                    if (myChildren.like gift) reply 'Thank you!'
                }
            }
        }
    }
}

アクターを現在のスレッドから切り離すことができる方法で (その記事の 2 ページ目の冒頭で説明されています)。

于 2012-06-20T13:35:07.803 に答える
2

ティムが言ったことへのマイナーな追加 - for (または while) ループは、反応の継続について知らないため、アクターの体内で期待どおりに機能しません。簡単に言えば、 loop() は、アクターの本体で後続のメッセージ取得 (反応) を反復する唯一の方法です。

于 2012-06-24T12:49:20.590 に答える