Ich möchte eine Funktion erstellen, die optionale Argumente enthält.
In Python würde ich so etwas machen:
def functionName(arg1,arg2=false,arg3=false):
if arg2:
#Do stuff with arguments
else:
#Do stuff without arguments
Ich habe versucht function FunctionName(arg1,arg2=false,arg3=false)
, es zu tun , aber es gibt mir nur einen Fehler, der ein ungültiges Argument sagt.
Wie würde ich das in Vimscript machen?
let a:arg=
mehr in vim tun . Sie müssen etwas wielet l:arg=
oder nur verwendenlet arg=
. Siehe github.com/vim/vim/commit/…Mit diesem Muster können Sie jedem Argument einen aussagekräftigen Namen zuweisen und einen Standardwert für alle Argumente angeben, die nicht angegeben wurden:
Boris Brodski wies darauf hin:
condition ? result_if_true : result_if_false
ist der bedingte (ternäre) Ausdruck, der in Abhängigkeit davon, ob der erste Ausdruck wahr ist oder nicht, als zweiter oder dritter Ausdruck ausgewertet wird.Wenn also kein drittes Argument angegeben wird,
baz
wird der Standardwert von verwendet0
.Ein Problem bei dem obigen Beispiel ist , dass
a:foo
kann nur mit dem zugegriffen wirda:
Präfix, währendbar
undbaz
kann ohne Präfix tun. Da dies nicht sehr konsistent ist, können Sie es vorziehen, alle Argumente in lokale Variablen zu ziehen, wie folgt:(Technisch gesehen können Sie das
l:
Präfix beispielsweise verwenden, um auf lokale Variablen in einer Funktion zu verweisen.l:baz
Dies ist jedoch redundant, sodass ich es nicht empfehlen würde.)Ich empfehle Ihnen jedoch, wann immer möglich dieses Formular zu verwenden:
Dadurch
!
können Sie Ihre Funktion zur Laufzeit neu definieren (z. B. durch erneutes Laden des Skripts) unds:
die Funktion auf den Skriptbereich beschränken. Dadurch wird vermieden, dass der globale Namespace verschmutzt wird (und eine Kollision riskiert wird), wenn Ihre Funktion nur von einer anderen Stelle im Skript referenziert wird. Es ist im Allgemeinen die bevorzugte Methode, Funktionen zu definieren, wenn sie nicht global sichtbar sein müssen. ;-)quelle
a:0
enthält nicht die festgelegten benannten Parameter.a:1
ist der erste Parameter in der...
(gerade mit VIM 8.0 getestet)Ich kenne mich mit Vimscript nicht gut aus, aber so würde ich es machen:
Sie können dann
call Func("Hello", "World")
sehen, dass "Hello", "World", "Unspecified baz" gedruckt wird.Hierbei wird die varargs-Funktion von vim-Funktionen verwendet, mit der Sie der Funktion eine beliebige Anzahl zusätzlicher Argumente übergeben können. Die Argumente werden in Variablen gespeichert, die abhängig von
a:0
(der Länge der zusätzlichen Argumentliste) entweder auf das entsprechende Argument oder auf einen Standardwert gesetzt werden.quelle
Seit Vim 8.1.1310 unterstützt Vim auch echte optionale Funktionsargumente.
Dies bedeutet jedoch, dass die meisten vim-Installationen dies noch nicht unterstützen. Auch neovim bietet diese Funktion nicht an.
Beispiel von
:help optional-function-argument
:quelle