Je veux faire une fonction qui a des arguments optionnels.
En python, je ferais quelque chose comme ça:
def functionName(arg1,arg2=false,arg3=false):
if arg2:
#Do stuff with arguments
else:
#Do stuff without arguments
J'ai essayé de le faire function FunctionName(arg1,arg2=false,arg3=false)
, mais cela me donne une erreur en disant un argument invalide.
Comment ferais-je cela dans vimscript?
let a:arg=
plus faire dans vim. Vous devez utiliser quelque chose commelet l:arg=
ou tout simplementlet arg=
. Voir github.com/vim/vim/commit/…Ce modèle vous permettra d'attribuer des noms significatifs à chaque argument et de fournir une valeur par défaut pour tous les arguments non fournis:
Comme l'a souligné Boris Brodski:
condition ? result_if_true : result_if_false
est l'expression conditionnelle (ternaire), qui correspond au deuxième ou au troisième terme selon que le premier terme était vrai ou non.Donc, si aucun troisième argument n'est fourni,
baz
prendra la valeur par défaut de0
.Un problème avec l'exemple ci - dessus est que
a:foo
peut uniquement accessible avec lea:
préfixe, toutbar
etbaz
peut faire sans préfixe. Comme cela n’est pas très cohérent, vous préférerez peut-être extraire tous les arguments en variables locales, comme ceci:(Techniquement, vous pouvez utiliser le
l:
préfixe pour faire référence à des variables locales dans une fonction, par exemplel:baz
, mais ceci est redondant, je ne le recommanderais donc pas.)Mais je vous recommande d'utiliser ce formulaire chaque fois que possible:
Le
!
vous permet de redéfinir votre fonction lors de l' exécution (par exemple en rechargeant le script), et las:
limite de la fonction portée du script. Cela évite de polluer l'espace de nom global (et le risque de collision) si votre fonction est uniquement référencée ailleurs dans le script. C'est généralement le moyen préféré pour définir des fonctions lorsqu'elles n'ont pas besoin d'être globalement visibles. ;-)la source
a:0
n'inclut pas les paramètres nommés fixes.a:1
est le premier paramètre de la...
(vient de l’être avec VIM 8.0)Je ne connais pas bien vimscript, mais voici comment je le ferais:
Vous pouvez alors
call Func("Hello", "World")
voir que les messages "Hello", "World", "Unspecified baz" sont affichés.Ceci utilise la fonctionnalité varargs des fonctions vim, qui vous permet de transmettre un nombre arbitraire d'arguments supplémentaires à la fonction. Les arguments sont stockés dans des variables qui, en fonction de
a:0
(la longueur de la liste des arguments supplémentaires), sont définies sur leur argument correspondant ou sur une valeur par défaut.la source
Depuis Vim 8.1.1310, Vim prend également en charge les arguments de fonctions optionnelles réelles.
Cependant, cela signifie que la plupart des installations de vim ne le supportent pas encore. De plus, neovim n'offre pas cette fonctionnalité.
Exemple de
:help optional-function-argument
:la source