我一直在玩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,它只返回表达式的值
{ println("hello") }
,这是一个lambda expression。 g
的返回类型是() -> Unit
,它不执行lambda体!
这也是explained here。
=
from your function declaration:
fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }