Ich bin ziemlich neu in Scala und stolperte über ein kleines Problem, das mich stört. Lassen Sie uns sagen, dass eine Methode mit StandardparameterMethodenaufruf mit Optionswert oder Default-Parameter in Scala
def foo(v: Any = "default"): String = s"called with parameter '$v'"
und eine Option val opt: Option[String]
. Wie kann diese Methode mit dem Optionswert (falls definiert) oder dem Standardparameter aufgerufen werden? ich meinen trotz der offensichtlichen Lösung
val result = if (opt.isDefined)
from.here.to.foo(opt.get)
else
from.here.to.foo()
und mit dem doppelten Methode mit (möglicherweise lange) Objektkette geben? Nicht zu erwähnen, mit mehr als einen optional/Standardparameter ...
Alles, was ich tun konnte, ist das nicht hilfreich Helfer
def definedOrDefault[A, B](opt: Option[A], f0: => B, f1: A => B): B =
if (opt.isDefined) f1(opt.get) else f0
aber wenn keine Standardparameter in höherer Ordnung in der Lage zu erwähnen Funktionen ... das war's. Erinnert mich an die schlechten alten Zeiten mit Java, wo das Überladen von Methoden das gleiche Problem verursacht.
Sie könnten sogar den Parameter "default" in diesem Fall auf 'None' setzen, um einige der gleichen Semantik beizubehalten. – wheaties
Ja, das habe ich mir auch gedacht. Die Antwort war work in progress: p –
Ich hatte auf eine Lösung gehofft, bei der die Methode unberührt bleiben kann, sie könnte Teil einer Bibliothek sein und außerhalb meiner Reichweite liegen. Und die Überprüfung der Parameter bricht zuerst den funktionalen Stil. Aber immer noch nett! – ABika