2016-03-14 1 views
2

Je joue avec Kotlin/RxJava et a essayé de créer une méthode d'extension pour ajouter un Subscription à un CompositeSubscription, qui fonctionnerait comme:Puis-je créer une méthode d'extension Kotlin pour ajouter un abonnement rxJava à un CompositeSubscription?

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

C'est ma tentative à ce jour:

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

Il compile et s'exécute sans erreurs, mais ne semble pas réellement ajouter le Subscription au CompositeSubscription. Est-ce que je fais quelque chose de mal?

+0

marque s'il vous plaît la question – voddan

Répondre

6

Votre fonction n'est pas définie correctement. Comparer:

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

Cette fonction exécute l'instruction println("hello") et est un Unit-returning function simple (même à void en Java).

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

Cette fonction est un single-expression function, il retourne juste valeur de l'expression
{ println("hello") }, qui est un lambda expression. Le type de retour de g est () -> Unit, et n'exécute pas le corps lambda!

Ceci est également explained here.


Pour corriger votre code, vous pouvez simplement supprimer = de votre déclaration de fonction:

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

fermée qui a fait le tour, merci! – grepx