Доступ к переменным вне Groovy замыкания - PullRequest
1 голос
/ 19 августа 2011

Я обрабатываю файл журнала построчно в замыкании eachLine, и мне нужно запомнить значение из предыдущей итерации. Проблема в том, что область действия переменной currentCampaign внутри цикла, очевидно, отличается от области действия цикла, поэтому она не запоминается между каждой итерацией. (в основном, одна строка будет иметь идентификатор кампании, затем я сканирую вперед для следующего экземпляра объекта, содержащего «redirectLink». Мне нужно запомнить, какой последний идентификатор кампании был в файле)



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


1 Ответ

2 голосов
/ 19 августа 2011

Вы пробовали более простой пример?По крайней мере, в Groovy 1.8.0 область действия currentCampaign должна распространяться на весь ваш пример.

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