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

Can I create a Kotlin extension method for adding an rxJava Subscription to a CompositeSubscription?

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

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

这是我目前的尝试:

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

它编译和运行没有错误,但似乎并没有真正将 Subscription 添加到 CompositeSubscription。我做错了什么吗?

您的函数定义不正确。比较:

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

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

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

这个函数是single-expression function, it just returns value of expression
{ println("hello") }, that is a lambda expressiong 的 return 类型是 () -> Unit, 并且它不执行 lambda 体!

这也是


要修复您的代码,您只需从函数声明中删除 =

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