¿Puedo crear un método de extensión Kotlin para agregar una suscripción rxJava a una suscripción compuesta?

Estuve jugando con Kotlin / RxJava y traté de crear un método de extensión para agregar una Suscripción a una suscripción compuesta, que funcionaría así:

search.subscribe { //do stuff }.addToComposite(compositeSubscription) 

Este es mi bash hasta ahora:

 fun Subscription.addToComposite(composite: CompositeSubscription) = { composite.add(this) } 

Se comstack y se ejecuta sin errores, pero no parece agregar realmente la Suscripción a la Suscripción compuesta. ¿Estoy haciendo algo mal?

Su function está definida incorrectamente. Comparar:

 fun f() { println("hello") } 

Esta function ejecuta la instrucción single println("hello") y es una function simple de recuperación de Unit (lo mismo que void en Java).

 fun g() = { println("hello") } 

Esta function es una function de expresión única , solo devuelve el valor de expresión
{ println("hello") } , que es una expresión lambda . El tipo de retorno de g es () -> Unit , ¡ y no ejecuta el cuerpo lambda!

Esto también se explica aquí .


Para arreglar su código, simplemente puede eliminar = de su statement de function:

 fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) } 
  • Obligatorio <Objeto> y encontrado <Objeto>?
  • Excepción causada por: java.lang.ClassNotFoundException: org.reactivestreams.Publisher
  • Comportamiento con Kotlin Higher-Order Functions e interfaces de método único?
  • ¿Cómo especificar la versión de RxJava al usar RxKotlin?
  • RxJava- Gire Observable en Iterator, Stream o Sequence
  • ¿Cómo corotines de Kotlin son mejores que RxKotlin?
  • Crear nueva instancia de object Kotlin
  • ¿Cómo hacer un grupo? ¿Por qué coleccionar usando RxJava y Kotlin?
  • La suscripción de rx kotlin no funciona, no recibe artículos
  • Cómo pasar nulo a un Observable con tipo anulable en RxJava 2 y Kotlin
  • Para una function de Kotlin utilizada como expresión, ¿hay una forma concisa de operar y devolver un valor?