Scala Standardparameter und null
Habe ich eine Methode wie diese:
def aMethod(param: String = "asdf") = {
...
}
Wenn die Methode wie folgt aufgerufen wird, dann param angegeben ist der default-Wert "asdf":
aMethod() ...
Aber das, was ich möchte, ist, dass, wenn die Methode aufgerufen wird, mit null
dann wird der default-Wert wäre auch angewendet werden:
aMethod(null) //inside the method, I can use `param` and it has the value "asdf".
Was ist der beste Weg, dies zu tun in Scala? Ich kann mir denken, pattern-matching oder eine einfache if
- Anweisung.
InformationsquelleAutor der Frage John Smith | 2012-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pattern-matching
Option (implizit)
Option (explizit)
Der Letzte Ansatz ist eigentlich die Redewendungen und lesbar, sobald Sie verwenden, um es.
InformationsquelleAutor der Antwort Tomasz Nurkiewicz
Aber die Frage muss gestellt werden: warum können
null
? WürdeOption
möglich sein in Ihrem Fall? Für das, was Sie tun könnten:Dies macht es klar, dass Ihre Methode erwartet, dass die Möglichkeit einer "null" - argument.
InformationsquelleAutor der Antwort dhg
Wenn das Methode hat nur ein oder zwei Standard-Parametern kann eingestellt werden, um
null
betrachten Sie dieses Muster:Gibt es einige Vorteile:
Darüber hinaus betrachten Sie das folgende Szenario:
Klar, hier müssen wir verlängern den Zug, während die Erhaltung der ursprünglichen Standardwert zurückgesetzt. Jedes beliebige Muster, das umfassen zunächst die Einstellung der parameter
null
gefolgt von einer überprüfung und tatsächliche Standardwert wird den Vertrag zu brechen, eingerichtet durch das Merkmal:In der Tat auch in diesem Szenario die einzige Möglichkeit zum beibehalten des ursprünglichen Wertes aus
ATrait
werden:Jedoch in dem Szenario, wenn es mehr als ein oder zwei Standard-Parametern kann eingestellt werden, um
null
das Muster beginnt immer eher chaotisch:Immer noch beim überschreiben eines bestehenden Vertrages, dies könnte der einzige Weg sein, zu Ehren der ursprünglichen Standard-Werte.
InformationsquelleAutor der Antwort Vlad Gudim