2016-03-29 7 views

Antwort

1

Die Signatur von doOnSubscribe ist:

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

Das heißt, dauert es ein nach Namen Argument. So haben Sie es wie folgt zu verwenden:

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

by-Name bedeutet, dass die println nicht ausgeführt werden, wenn auf doOnSubscribe vergangen, aber nur einmal doOnSubscribe nutzt.

Was Sie wurden doOnSubscribe vorbei ist eine 0-arity Funktion, das heißt ein Ausdruck des Typs () => Unit, und durch den Wert eines Ausdrucks zu verwerfen, kann Scala jeden Ausdruck in Einheit drehen, ist also, warum es kompiliert.

Dies ist IMHO verwirrend, und ich würde lieber ein () => Unit Argument anstelle von => Unit, dann würde es funktionieren, wie Sie erwartet haben.

Btw: Sie sind not the first dieses ;-)

+0

Ouch verwirrt zu sein - du hast recht, ich völlig verpasst. Ich habe einen Kommentar zu diesem Bug hinzugefügt - ich denke, es gibt eine Möglichkeit, beide Stile zu unterstützen, und zwar auf Kosten eines zusätzlichen Imports. –

Verwandte Themen