fun println(obj: Any?) {} class Demo0 { private val some = object { fun foo() { println(state) // Ok } } private var state: Boolean = true } class Demo1 { private val some = object { fun foo() { if (state) state = true println(state) // must be initialized } } private var state: Boolean = true } class Demo1A { fun foo() { if (state) state = true println(state) // Ok } private var state: Boolean = true } class Demo2 { private val some = object { fun foo() { if (state) state = true else state = false println(state) // OK } } private var state: Boolean = true } class Demo3 { private val some = run { if (state) state = true println(state) // OK } private var state: Boolean = true } fun T.run(f: T.() -> R) = f() fun exec(f: () -> T): T = f() class Demo4 { private val some = exec { if (state) state = true println(state) // must be initialized } private var state: Boolean = true } class Demo5 { private var state: Boolean = true private val some = object { fun foo() { if (state) state = true println(state) // OK } } }