我可以创建一个 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 expression。 g
的 return 类型是 () -> Unit
, 并且它不执行 lambda 体!
这也是。
要修复您的代码,您只需从函数声明中删除 =
:
fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }
我一直在玩 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 expression。 g
的 return 类型是 () -> Unit
, 并且它不执行 lambda 体!
这也是
要修复您的代码,您只需从函数声明中删除 =
:
fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }