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

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

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

这是我迄今的尝试:

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

它编译和运行没有错误,但似乎并没有实际将订阅添加到CompositeSubscription。 我做错了什么?

你的功能定义不正确。 比较:

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

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

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

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

这也在这里解释 。


要修复你的代码,你可以从你的函数声明中删除=

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