zu Neudefinition habe ich eine Funktion wie folgt definiert:Scala wie Standardeinstellungen zu verwenden, ohne sie
def par(min: Int = -1, exact: Int = -1, auto: Boolean = false) = {
require(min > 0 || exact > 0 || auto, "Invalid argument")
OpPar(drm, minSplits = min, exactSplits = exact)
}
In einer anderen Funktion, die diese gebe ich in den Optionen für die par
params verwendet. Ich möchte par
erlauben, seine eigenen Standardeinstellungen zu verwenden, aber sehe nicht, wie man das in Scala macht (ohne hässliche Logik), also muss ich die Standardeinstellungen wie diese neu definieren.
drmARaw.par(
min = minPar.getOrElse(-1),// if par changes this may the be wrong default
exact = exactPar.getOrElse(-1),// if par changes this may the be wrong default
auto = autoPar.getOrElse(true))
Wenn die Standardwerte immer dies die falschen Vorgaben zu min
und exact
passieren wird sich ändern. Mit komplizierter Logik kann ich entscheiden, welche Version von par
aufrufen, basierend auf Option
Parameter sind nonEmpty
für minPar
und exactPar
aber das ist ziemlich hässlich und müsste für jede Funktion mit Standard-Parameter anders geschrieben werden. Diese Situation tritt bei praktisch jeder Scala-Bibliothek auf. Wenn sie die Standardeinstellungen ändern und ich es nicht merke, bricht mein Code ab.
Das obige Beispiel veranschaulicht das Problem, aber ich suche nach einem Scala-Idiom, das jeden Fall abdecken würde, in dem eine Funktion Standardwerte hat, die sich ändern könnten. Ich möchte Code schreiben, der von Standardparamänderungen in lib-Funktionen unabhängig ist.
Sie könnten eine Konstante für jeden Standardwert verwenden, d. H. 'Val MinParDefault = -1'. Dann könnten Sie das in 'minPar.getOrElse (MinParDefault)' verwenden. –
Ich kann die Par-Funktion nicht ändern, sie befindet sich in einer Lib. – pferrel
Mein Fehler - ich meinte für 'minPar' usw. –