2

我一直在玩 Kotlin/RxJava 并尝试创建一个扩展方法来将 a 添加Subscription到 a CompositeSubscription,它的工作方式如下:

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

这是我迄今为止的尝试:

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

它编译并运行没有错误,但似乎并没有真正SubscriptionCompositeSubscription. 难道我做错了什么?

4

1 回答 1

6

您的函数定义不正确。相比:

fun f() { println("hello") }

该函数执行单个语句println("hello"),是一个简单的Unit返回函数(与voidJava 相同)。

fun g() = { println("hello") }

这个函数是一个单表达式函数,它只是返回表达式的值
{ println("hello") },也就是一个lambda 表达式g的返回类型是() -> Unit它不执行 lambda 体!

这也在这里解释


要修复您的代码,您可以=从函数声明中删除:

fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }
于 2016-03-14T21:08:24.123 回答