Могу ли я создать метод расширения Kotlin для добавления rxJava-подписки на композитную подписку?

Я играл с Kotlin / RxJava и пытался создать метод расширения для добавления Subscription на CompositeSubscription Subscription , которая будет работать следующим образом:

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

Это моя попытка:

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

Он компилируется и запускается без ошибок, но фактически не добавляет Subscription на CompositeSubscription Subscription . Я делаю что-то неправильно?

Ваша функция определена неправильно. Для сравнения:

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

Эта функция выполняет одиночный оператор println("hello") и является простой функцией Unit refurning (то же, что и в Java).

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

Эта функция является функцией одного выражения , она просто возвращает значение выражения
{ println("hello") } , то есть лямбда-выражение . Возвращает тип g () -> Unit , и он не выполняет тело лямбда!

Это также объясняется здесь .


Чтобы исправить ваш код, вы можете просто удалить = из объявления функции:

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