2012-06-20 2 views
2

Actors 본문에서 우리는 loop() 메서드 내부에 react() 메서드를 작성해야합니다. 이 루프 방법이 "for"또는 "while"루프와 다른 점을 알고 싶습니다.Actors 본문의 "loop()"메서드의 의미 - GPars

GPars 설명서에 따르면 "loop()는 중첩 된 react() 블록과 협력하여 후속 메일 검색에서 반복되도록합니다." 나는 이것을 정확하게 이해하지 못한다. 내 이해에 따라 우리가 루프 메서드에 제공하는 모든 클로저가 반복적으로 무수히 반복 실행됩니다. 그렇다면 중첩 된 react() 블록과의 조정은 무엇입니까?

답변

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

Tim이 말한 내용에 약간의 추가가 있습니다. 반응의 연속에 대해 알지 못하기 때문에 배우의 본문 내부에서 예상 한대로 (또는 while) 루프가 작동하지 않습니다. 간단히 말해 루프()는 액터 몸체에서 후속 메시지 검색 (반응) 전반에 걸쳐 반복을 수행하는 유일한 방법입니다.