Est-il possible d'affecter plusieurs valeurs de retour directement aux variables sans passer par une variable temporaire dans Emacs Lisp?
Par exemple, supposons que j'ai une fonction qui renvoie une liste de deux listes:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Si je veux affecter la première valeur de retour à list-a
et la deuxième valeur de retour à list-b
, je peux le faire en utilisant une variable temporaire temp
, par exemple:
(let* ((temp (test-func)) (list-a (car temp)) (list-b (cadr temp)))
(message-box (prin1-to-string list-a))
(message-box (prin1-to-string list-b)))
Est-il possible de faire cela plus simplement? (Je suis habitué à Perl et Python où vous n'avez pas besoin de spécifier une variable temporaire)
let
intérieur de la fonction .. Je n'avais pas prévu de définir de variables globales :)
cl-destructuring-bind
macro. Aussi, aviez-vous vraiment l'intention d'utiliser à l'setq
intérieur d'undefun
?setq
crée une variable "spéciale" (accessible globalement), quelque chose que vous mettriez généralement en dehors d'une fonction (car il n'y a pas de sens à déclarer la même variable plus d'une fois, alors que les fonctions sont destinées à être exécutées plusieurs fois).