Cómo crear variables en el context principal

Estoy tratando de implementar algo similar a esta syntax en Kotlin

class MyClass() { fun before(init: () -> Unit): Unit { with(this) init } fun after(block: () -> Unit): Unit { with(this) block } } fun main () { var myClass = MyClass() myClass.before { var a = 5 } myClass.after { println("Double of a is ${a * 2}") } } 

En este momento, esto no funcionará porque no se puede resolver dentro de after . Entiendo que esto se debe a la forma en que funcionan los cierres.

Mi pregunta es si hay algún mecanismo en Kotlin que me permita hacer esto, crear variables en un cierre / extensión de tal manera que se almacenen en el object receptor y sean accesibles a otros cierres / extensiones.

Esto es parte de un esfuerzo por migrar un script de Groovy a Kotlin.

Descargo de responsabilidad: Esta es mi primera vez en Kotlin. He leído los documentos, pero me puede estar perdiendo algo (mucho). Siéntase libre de simplemente señalar en la dirección correcta

EDITAR: Agregar ejemplo comstackble

 class Aa() { var a: Int = 0 var bb: () -> Unit = null!! fun ww (block: () -> Unit) { bb = block } fun doit(block: () -> Unit) { with(bb) { block() } } } fun main(args: Array<String>) { val exec = fun Aa.(other: () -> Unit): Unit = other() aa.ww { var xx = 5 } aa.doit { // println("with $xx") <- this fails } }