2011-08-18 94 views
1

我在eachLine閉包中逐行處理日誌文件,並且需要記住先前迭代的值。問題是循環內「currentCampaign」變量的範圍明顯不同於循環外部,所以在每次迭代之間都不會記住它。 (基本上,一個行會活動ID,然後我快進的的下一個實例像含「redirectLink」我需要記住的最後CAMPAIGNID是文件)訪問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

你試過一個更簡單的例子?至少在groovy 1.8.0下,currentCampaign的範圍應該擴展到整個範例。

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