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

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

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

这是我迄今的尝试:

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

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

One Solution collect form web for “我可以创建一个将rxJava订阅添加到CompositeSubscription的Kotlin扩展方法吗?”

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

 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) } 
  • RxJava 2.0和Kotlin Single.zip()以及单曲列表
  • 如何从generic observable订阅PublishRelay?
  • 我无法从rxkotlin的groupby得到地图
  • 不能用RxKotlin“观察”主线程
  • 如何在RxJava 2和Kotlin中将null传递给可空类型的Observable
  • Kotlin协同程序如何比RxKotlin更好?
  • 当订阅TestSubscriber时,RxKotlin - Single.just()不会发出
  • 在Kotlin函数类型中表示“超级”泛型?
  • 如何在kotlin编程语言中使用如下所述的循环?
  • 重复发送对象到Rx上的子客户端
  • 与RxKotlin获取NetworkOnMainThreadException
  • Kotlin language will be the best programming language for Android.