Я играл с 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) }