我可以创建一个将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) }