Emacs Lisp ne prend pas en charge la syntaxe des valeurs par défaut non nulles des paramètres facultatifs. Quel est l'idiome recommandé pour fournir ces paramètres?
Pour clarifier mon propos, voici une manière trop explicite de le faire.
(defun command (a &optional supplied-b)
(let ((b (or supplied-b default-b)))
(command-body a b)))
Quel est, le cas échéant, le style recommandé?
setq
dans une forme booléenne «pure» commeor
. À mon avis,when
c'est certainement plus approprié ici, mais c'est généralementlet
l'expression du choix d'établir ou de modifier les liaisons locales. IOW, le code original me semble beaucoup plus agréable.(unless b (setq b default)
pourrait être mieux. Personnellement, je pense quelet
c'est redondant ici parce queb
c'est déjà local audefun
.let
à- dire plutôt qu'une forme à effets secondaires commesetq
. C'est le code d'un paramètre par défaut, mais l'utilisation généreuse desetq
pour changer les variables locales rend le code difficile à lire et à suivre. Je pense qu'il est préférable de considérer toutes les liaisons locales comme immuables et d'établir uniquement de nouvelles liaisons aveclet
. IOW, préférez un style fonctionnel à un impératif.Vous pouvez utiliser
cl-defun
, ce qui vous permet de spécifier une valeur par défaut pour les arguments facultatifs:La valeur par défaut, dans ce cas
default-b
, sera évaluée à chaque appel de la fonction.la source