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

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

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

Это моя попытка до сих пор:

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

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

1 ответ

Решение

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

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

Эта функция выполняет один оператор println("hello") и простой Unit функция возврата (аналогично void на Яве).

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

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

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


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

fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }
Другие вопросы по тегам