2011-08-18 4 views
1

eachLine 클로저에서 한 줄씩 로그 파일을 처리 중이므로 이전 반복에서 값을 기억해야합니다. 문제는 루프 내부의 "currentCampaign"변수의 범위가 루프 외부와는 분명히 다르므로 각 반복 사이에 기억되지 않습니다.groovy closure 외부 변수에 대한 액세스

 


    def currentCampaign = "" 
    file.eachLine{ line-> 
     if(line.indexOf("campaignId") != -1){ 
      currentCampaign = extractCampaign(line) 
     } 
     if(line.indexOf("redirectlink") != -1){ 
      recordRedirect(currentCampaign, extractRedirectLink(line)) 
     } 
    } 

 

답변

2

당신이 해봤 (기본적으로, 한 줄은 그때 "redirectLink"를 포함하는 같은가 다음에 나오는 경우를 앞으로 스캔 캠페인 ID를 가질 것이다. 나는 마지막 campaignId를이 파일에 있었는지 기억해야합니다) 간단한 예? 최소한 groovy 1.8.0 미만에서는 currentCampaign의 범위가 예제 전체로 확장되어야합니다.

def last = 0 
[5, 3, 9].each { 
    def result = last + it 
    last = it 
    result 
} 
println last // prints 9 
관련 문제