Wenn wir also eine Methode ausführen, die sowohl einen Fehler liefert als auch einen Wert zurückgibt, können wir den Rückgabetyp unserer Methode als Either[SomeErrorType, ReturnType]
codieren. Aber viele Male führen wir eine Methode für seine Nebenwirkungen aus, so dass der Rückgabetyp Unit
ist.Welcher Rückgabetyp sollte eine Scala-Methode haben, wenn sie Fehler zurückgeben/zurückgeben kann, aber den Rückgabetyp Einheit hat?
Ich könnte natürlich eine Either[SomeErrorType, Unit]
zurückgeben, aber das sieht auf jeden Fall seltsam aus.
Ich könnte auch nur ein Option[SomeErrorType]
zurück, aber es sieht nicht wirklich viel besser (und bricht eine eventuell vorhandene Symmetrie mit anderen Either[SomeErrorType, NonUnitReturnType]
s.
Was in diesen Fällen Ihr Ansatz ist?
def m(): Unit // and implicitly know that exceptions can be thrown?
;def m(): Either[SomeErrorType, Unit] // this is odd
;def m(): Option[SomeErrorType] // this is odd, as it makes it look as the return type of
m()on a successful run is an error code.
- Andere, an die ich nicht denken kann?
Dank
Warum? Was sind die Vorteile gegenüber den anderen Ansätzen? Wie es aussieht, scheint es, dass es bestenfalls ein Kommentar sein sollte. –
@TravisBrown Travis, du hast Recht. Ich habe die Antwort erweitert, um eine bessere Erklärung zu geben. Fröhliches Weihnachten! – maasg
über Entweder um einfacher in monadischen Konstruktionen zu arbeiten, ist es erwähnenswert, dass seit Scala 2.12 jetzt ist es so einfach wie Try. –