Если вы хотите хранить функции на карте и лениво их оценивать, вам, например, придется хранить эти функции как замыкания. Рассмотрим следующий пример:
def list = ['a', 'b', 'c']
def map = list.collectEntries { el -> [(el): { println el }] }
map.b()
В этом случае функция оценивается только тогда, когда она выполняется, и теперь, когда ей назначается ключ карты. Также вам придется использовать явный параметр имени, такой как el
, потому что если вы полагаетесь на it
, он меняет контекст при доступе к закрытию.
Существует несколько способов выполнения функции, хранящейся на карте. Рассмотрим следующие выражения в качестве примера:
map.b()
map.b.call()
map['b']()
map['b'].call()
map.getAt('b').call()
Если вы хотите сделать выполнение функции NPE безопасным, то лучшим вариантом будет следующее выражение:
map.getAt('b')?.call()
В этом случае звоните
map.getAt('d')?.call()
не сгенерирует никаких исключений.