È possibile assegnare più valori di ritorno direttamente alle variabili senza passare attraverso una variabile temporanea in Emacs Lisp?
Ad esempio, supponiamo che io abbia una funzione che restituisce un elenco di due elenchi:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Se desidero assegnare il primo valore restituito a list-a
e il secondo valore restituito a list-b
, posso farlo utilizzando una variabile temporanea temp
, ad esempio:
(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)))
È possibile farlo più semplicemente? (Sono abituato a Perl e Python in cui non è necessario specificare una variabile temporanea)
let
la funzione .. Non avevo intenzione di impostare variabili globali :)
cl-destructuring-bind
macro. Inoltre, hai davvero intenzione di utilizzaresetq
all'interno di undefun
?setq
crea una variabile "speciale" (accessibile a livello globale), qualcosa che in genere si inserisce al di fuori di una funzione (perché ha poco significato nel dichiarare la stessa variabile più di una volta, mentre le funzioni devono essere eseguite più di una volta).