我可以创建一个Kotlin扩展方法来将rxJava订阅添加到CompositeSubscription吗?

问题描述 投票:2回答:1

我一直在玩Kotlin / RxJava,并尝试创建一个扩展方法,将Subscription添加到CompositeSubscription,这将工作如下:

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

这是我到目前为止的尝试:

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

它编译并运行没有错误,但似乎没有实际添加SubscriptionCompositeSubscription。难道我做错了什么?

rx-java kotlin kotlin-extension rx-kotlin
1个回答
6
投票

您的功能定义不正确。相比:

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

这个函数执行单个语句println("hello"),是一个简单的Unit-returning function(与Java中的void相同)。

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

这个函数是一个single-expression function,它只返回表达式的值 { println("hello") },这是一个lambda expressiong的返回类型是() -> Unit,它不执行lambda体!

这也是explained here


To fix your code, you can just remove = from your function declaration:
fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }
© www.soinside.com 2019 - 2024. All rights reserved.