" loop()"的重要性是什么? Actors body中的方法 - GPars

时间:2012-06-20 10:52:56

标签: groovy actor gpars

在Actors体中,我们需要在loop()方法中编写react()方法。我想知道这个循环方法与“for”或“while”循环有何不同?

GPars文档说“loop()与嵌套的react()块协作,并确保在后续的消息检索中循环。”我不太明白这一点。根据我的理解,无论我们提供给循环方法的闭包,它将一次又一次地执行无限次。那么与嵌套的react()块协调是什么呢?

2 个答案:

答案 0 :(得分:3)

我相信这个DrDobbs article from last year(第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!'
                }
            }
        }
    }
}

允许Actor与当前线程分离的方式(在该文章的第2页开头描述)。

答案 1 :(得分:1)

蒂姆所说的一个小小的补充 - 因为他们不知道反应的延续,因此(或同时)循环在演员的身体内不会按预期工作。简而言之,loop()是在actor的正文中进行后续消息检索(反应)迭代的唯一方法。