Могу ли я создать метод расширения 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) } 
Intereting Posts
Как решить: «Не удается найти getter для атрибута« android: text »при реализации двусторонней привязки данных к пользовательскому представлению? Как начать второй наблюдаемый после получения результата от первого наблюдаемого в андроиде? Есть ли способ сортировки ключей groupBy в rx-java / kotlin? Kotlin – исключение документа, созданное методом интерфейса Конфликт Android и просмотрщик Android создать 2 одинаковых класса разных подтипов Явный аргумент типа Kotlin и RxJava Как сопоставить строку JSON с Kotlin Map В TornadoFX, как я могу выбрать глубоко вложенное свойство для свойства nullable ItemViewModel? Проверьте, является ли функция расширением Как выполнить действие для всех комбинаций элементов в списках? Kotlin, приемник функции кастинга Как правильно настроить плагин Kotlin для Gradle? Использование ресурса в kotlin func – не работает с жирным банком (одна банка) Является ли Kotlin 100% совместимым с ART на Android?