Могу ли я создать метод расширения 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) }