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

时间:2016-03-14 18:48:09

标签: rx-java kotlin kotlin-extension rx-kotlin

我一直在玩Kotlin / RxJava并尝试创建一种扩展方法,用于将Subscription添加到CompositeSubscription,其工作原理如下:

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

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

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

它编译并运行没有错误,但似乎没有将Subscription实际添加到CompositeSubscription。我做错了吗?

1 个答案:

答案 0 :(得分: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

<小时/> 要修复代码,只需从函数声明中删除=

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