我一直在玩Kotlin / RxJava并尝试创建一种扩展方法,用于将Subscription
添加到CompositeSubscription
,其工作原理如下:
search.subscribe {
//do stuff
}.addToComposite(compositeSubscription)
这是我到目前为止的尝试:
fun Subscription.addToComposite(composite: CompositeSubscription) = { composite.add(this) }
它编译并运行没有错误,但似乎没有将Subscription
实际添加到CompositeSubscription
。我做错了吗?
答案 0 :(得分:6)
您的功能定义不正确。比较:
fun f() { println("hello") }
此函数执行单个语句println("hello")
,并且是一个简单的Unit
-returning function(与Java中的void
相同)。
fun g() = { println("hello") }
此功能为single-expression function,只返回表达式{ println("hello") }
的值,即lambda expression。 g
的返回类型为() -> Unit
,且它不会执行lambda正文!
这也是explained here。
<小时/> 要修复代码,只需从函数声明中删除=
:
fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }