Kotlin: Wie mache ich einen Funktionsaufruf, indem ich den Standardwert des ersten Arguments verwende und einen Wert für den zweiten übergebe?

9

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%     
hlupico 18.01.2016, 19:52
quelle

2 Antworten

23

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):

%Vor%

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
    
Jayson Minard 18.01.2016, 19:55
quelle
1

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).

    
Jacob Zimmerman 20.01.2016 12:29
quelle

Tags und Links