2016-03-29 26 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

哎喲所迷惑 - 你說得對,我完全錯過了。我添加了對該錯誤的評論 - 我認爲有一種方法可以支持這兩種樣式,但需要額外的導入。 –

相關問題