在Actors体中,我们需要在loop()方法中编写react()方法。我想知道这个循环方法与“for”或“while”循环有何不同?
GPars文档说“loop()与嵌套的react()块协作,并确保在后续的消息检索中循环。”我不太明白这一点。根据我的理解,无论我们提供给循环方法的闭包,它将一次又一次地执行无限次。那么与嵌套的react()块协调是什么呢?
答案 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的正文中进行后续消息检索(反应)迭代的唯一方法。