Проблема исходного кода в том, что вы определяете только некоторые локальные переменные, которые никогда не используются. Вместо этого назначенное закрытие возвращается напрямую.
Чтобы ваш исходный код работал, вы можете позвонить:
closure()("A")("B")
(Каждый закрывающий вызов возвращает следующее закрытие, и вы просто объединяете вызовы; конечно, нет необходимости иметь def clouserXXX
там).
Если вы пропустите only def
, вы создадите "глобальные переменные", и это, скорее всего, не то, что вы хотите.
Если вы хотите, чтобы имена были там, вы должны вернуть что-то с именами. Один простой пример - использование карт в качестве возврата. Например:
def closure = { ->
[closureOne: { _argsA ->
[closureTwo: { _argsB ->
println(_argsA)
println(_argsB)
}]
}]
}
closure().closureOne("A").closureTwo("B")