Czy możliwe jest przypisanie wielu zwracanych wartości bezpośrednio do zmiennych bez przechodzenia przez zmienną tymczasową w Emacs Lisp?
Załóżmy na przykład, że mam funkcję, która zwraca listę dwóch list:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Jeśli chcę przypisać pierwszą wartość zwracaną list-a
i drugą wartość zwracaną list-b
, mogę to zrobić za pomocą zmiennej tymczasowej temp
, na przykład:
(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)))
Czy można to zrobić prościej? (Jestem przyzwyczajony do Perla i Pythona, gdzie nie musisz określać zmiennej tymczasowej)
let
wewnątrz funkcji. Nie planowałem ustawiać żadnych zmiennych globalnych :)
cl-destructuring-bind
makro. Ponadto, czy naprawdę zamierzałeś używać wsetq
środkudefun
?setq
tworzy „specjalną” (globalnie dostępną) zmienną, coś, co zwykle umieszcza się poza funkcją (ponieważ deklarowanie tej samej zmiennej więcej niż raz ma niewiele sensu, podczas gdy funkcje mają być uruchamiane więcej niż jeden raz).