Это может быть неверный ответ, но внешняя область не должна быть глобальной; например, она может быть внутри функции или даже анонимной функции, такой как:
def closure = {
def a
return {
if (a == null) a = 1
println a++
}
}()
closure() // prints 1
closure() // prints 2
closure() // prints 3, etc...
Цель анонимной функции - предоставить область действия переменной a
, не загрязняя глобальную область. Обратите внимание, что эта функция оценивается сразу после ее определения.
Таким образом, область действия a
фактически является "закрытой" для этого замыкания (поскольку оно единственное со ссылкой на него после оценки внешней функции). Но переменная определяется до первого closure()
вызова, поэтому это может быть не то, что вы ищете.