Kotlin with-statement como expresión

Podemos hacer

val obj = Obj() with (obj) { objMethod1() objMethod2() } 

¿Pero hay una manera de hacer esto?

 val obj = with(Obj()) { objMethod1() objMethod2() } 

Para resolver un caso común donde crea un object y llama a algunos methods para inicializar su estado.

Claro, puedes usar la function .apply { } stdlib, que

Llama al bloque de function especificado con this valor como su receptor y devuelve this valor.

 public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this } 

Ejemplo de uso:

 val obj = Obj().apply { objMethod1() objMethod2() } 

Puedes encontrarlo entre muchos otros modismos de Kotlin aquí en la reference .

Tu segundo ejemplo también funciona; solo asegúrate de que el lambda devuelve el valor correcto (el resultado de la última expresión es el valor devuelto de la expresión with ):

 val obj = with(Obj()) { objMethod1() objMethod2() this // return 'this' because we want to assign the new instance to obj } 
  • Convirtiendo el método Java "Callable <T>" a Kotlin
  • JAX-RS (Apache CXF) Inyección de context a través de setter
  • ¿Cómo compartir la configuration repetitiva de Kotlin en múltiples proyectos de Gradle?
  • Error de generación transformClassesWithDesugar después de actualizar a AS 3.0 Canary 6
  • enlace de vista de android.R.id en Kotlin
  • Contrato de testing DSL comportamiento incorrecto / error
  • Filter rxjava no funciona
  • JavaRX: cómo devolver el valor en caching inmediatamente y en paralelo hacer una request de networking
  • Causado por: rx.exceptions.MissingBackpressureException
  • editText get text kotlin
  • Cómo enviar notifications desde IntentService en Android usando Kotlin