Ist es möglich, Variablen mehrere Rückgabewerte direkt zuzuweisen, ohne eine temporäre Variable in Emacs Lisp zu durchlaufen?
Angenommen, ich habe eine Funktion, die eine Liste mit zwei Listen zurückgibt:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Wenn ich den ersten Rückgabewert list-a
und den zweiten Rückgabewert zuweisen möchte list-b
, kann ich dazu eine temporäre Variable verwenden temp
, zum Beispiel:
(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)))
Kann man das einfacher machen? (Ich bin Perl und Python gewohnt, bei denen Sie keine temporäre Variable angeben müssen.)
let
innerhalb der Funktion zu verwenden .. Ich hatte nicht vor, globale Variablen zu setzen :)
cl-destructuring-bind
Makro versuchen . Wollten Sie auch wirklichsetq
in einem verwendendefun
?setq
erstellt eine "spezielle" (global zugreifbare) Variable, die Sie normalerweise außerhalb einer Funktion platzieren würden (da es wenig Sinn macht, dieselbe Variable mehr als einmal zu deklarieren, während Funktionen mehr als einmal ausgeführt werden sollen).