2016-03-29 28 views

回答

1

doOnSubscribe的签名是:

def doOnSubscribe(onSubscribe: => Unit): Observable[T] 

也就是说,它需要一个按名称参数。所以,你必须使用它,如下所示:

Observable.just(1).doOnSubscribe(println(s"subscribed")) 

按姓名意味着,传递给doOnSubscribeprintln不会被执行,但只有一次doOnSubscribe使用它。

什么你传递给doOnSubscribe是0元数函数,即() => Unit类型的表达式,并通过丢弃一个表达式的值,斯卡拉可以将任何表达式为单位,所以这就是为什么它编译。

这是恕我直言的混淆,我宁愿() => Unit参数而不是=> Unit,那么它会按预期工作。

顺便说一句:你是not the first通过这个;-)

+0

哎哟所迷惑 - 你说得对,我完全错过了。我添加了对该错误的评论 - 我认为有一种方法可以支持这两种样式,但需要额外的导入。 –

相关问题