powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Groovy. Подскажите, как передать переменную в замыкание, используемое в цикле
2 сообщений из 2, страница 1 из 1
Groovy. Подскажите, как передать переменную в замыкание, используемое в цикле
    #38992963
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, имеется вот такой кусок кода:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
def serializedSegmentMap = testSuite.getPropertyValue("segmentMapping_A")
def segmentsMap = Eval.me(serializedSegmentMap)

def isForSegmentEligibleForCheckIn(itinPortion, segmentEligibleForCheckIn) {
    def airReferencesNumber = itinPortion.SegmentReference.@segmentNumber.text().toString()
    def segmentNumber = segmentsMap[airReferencesNumber]
    return segmentNumber.equals(segmentEligibleForCheckIn)

}

def baggageItineraryPortions = xmlResponse.Body.CalculateBagFeesRS.PassengerBagFees.BaggageItinerary.BaggageItineraryPortions
baggageItineraryPortions.each {

    if(isForSegmentEligibleForCheckIn(it, segmentEligibleForCheckIn)) {
         doSomething()
    }

}



Проблема в том переменная segmentsMap не видна внутри замыкания isForSegmentEligibleForCheckIn(), добиться видимости можно, если объявить переменную с аннотацией @Field, но в этом случае компилятор ругается на вызов Eval.me(serializedSegmentMap).

Подскажите, как можно решить эту проблему?
...
Рейтинг: 0 / 0
Groovy. Подскажите, как передать переменную в замыкание, используемое в цикле
    #38993103
Жентос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проблему, используя определение замыкания.
Работающий код выглядит так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
def serializedSegmentMap = testSuite.getPropertyValue("segmentMapping_A")
def segmentsMap = Eval.me(serializedSegmentMap)

def isForSegmentEligibleForCheckIn(itinPortion, segmentEligibleForCheckIn) {
    def airReferencesNumber = itinPortion.SegmentReference.@segmentNumber.text().toString()
    def segmentNumber = segmentsMap[airReferencesNumber]
    return segmentNumber.equals(segmentEligibleForCheckIn)

}

def baggageItineraryPortions = xmlResponse.Body.CalculateBagFeesRS.PassengerBagFees.BaggageItinerary.BaggageItineraryPortions
baggageItineraryPortions.each {

    if(isForSegmentEligibleForCheckIn(it, segmentEligibleForCheckIn, segmentsMap )) {
         doSomething()
    }

}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Groovy. Подскажите, как передать переменную в замыкание, используемое в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]