Ich würde gerne wissen, wie man eine Funktion mit Standardargumenten aufruft, wenn Sie den Wert des zweiten Arguments angeben wollen. Im folgenden einfachen Beispiel zeige ich, dass addTwo () zwei Argumente benötigt. Das 'erste' Argument hat einen Standardwert, aber das 'zweite' nicht. Wie würde ich diese Funktion aufrufen, die angibt, dass ich den Standardwert für 'first' mit dem gegebenen Wert 2 für 'second' verwenden möchte?
Der Aufruf von addTwo (2) löst einen Fehler aus.
%Vor% Dies ist ein Fehler, weil Kotlin nicht weiß, warum Sie einen zweiten Parameter weggelassen haben. Der first
kann standardmäßig, aber nicht second
sein. Wenn Sie also nur ein Argument übergeben haben, war dies der Parameter first
. Die Fehlermeldung sagt genau, was das Problem ist:
Es wurde kein Wert für den Parameter Sekunde
übergeben
Sie müssen benannte Argumente für alles nach dem ersten voreingestellten Parameter aufrufen, den Sie verwenden möchten freilassen. Für Ihren Fall wäre das:
%Vor%Wären Ihre voreingestellten Parameter in der anderen Reihenfolge gewesen, wäre Ihr Anruf in Ordnung.
%Vor% Wären Ihre Datentypen für die beiden Parameter unterschiedlich gewesen, hätten Sie einen anderen, weniger eindeutigen Fehler gesehen, der Ihnen mitteilt, dass der Typ des ersten Parameters ( Int
) erwartet wurde, nicht der Typ des zweiten ( Date
im folgenden Beispiel):
Hinweis: Sie können dasselbe Problem mit vararg
:
Nur ein Parameter darf als vararg markiert sein. Wenn ein Vararg-Parameter nicht der letzte in der Liste ist, können Werte für die folgenden Parameter mit der Syntax des benannten Arguments
übergeben werden
Zusätzliche Anmerkung: Aufgrund Ihrer Erfahrungen ist es im Allgemeinen eine bewährte Methode, Standardargumente zu den letzten Parametern in der Liste zu machen. Einige Sprachen erzwingen das sogar, wie zB Python (außer dass Python erzwungene benannte Argumente nach Standardvorgaben erlaubt, da es nicht möglich ist, sie nach Namen zu benennen, wie man mit Parametern nach Standardargumenten sowieso umgehen würde).
Tags und Links kotlin default-arguments