¿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) } 
  • Múltiples requestes de modificación2 usando Flowable en Kotlin
  • ¿Cómo leer JSON desde Url usando kotlin Android?
  • Comportamiento con Kotlin Higher-Order Functions e interfaces de método único?
  • RxKotlin collectInto () MutableList usando references de método
  • Usando RxJava para unir datos locales con datos remotos (o en caching)
  • RxKotlin flattenAsObservable (): no coincide con el método de reference
  • ¿Cómo hacer un grupo? ¿Por qué coleccionar usando RxJava y Kotlin?
  • OnComplete nunca se llamó con toSortedList () y groupBy ()
  • La biblioteca de Kotlin 'rxkotlin-0.21.0.jar' tiene un formatting no compatible. Actualice la biblioteca o el complemento
  • Cómo notificar a Observable cuando finalice CountdownTimer
  • Spring 5 and Kotlin 1.1 Coroutines: Type rx.Scheduler no presente