Чи можна присвоїти кілька змінних значень безпосередньо змінним без проходження тимчасової змінної в Emacs Lisp?
Наприклад, скажімо, у мене є функція, яка повертає список з двох списків:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Якщо я хочу призначити перше повернене значення list-a
і друге повернене значення list-b
, я можу це зробити за допомогою тимчасової змінної temp
, наприклад:
(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)))
Чи можна це зробити простіше? (Я звик до Perl і Python, де вам не потрібно вказувати тимчасову змінну)
let
всередині функції .. Я не планував встановлювати жодних глобальних змінних :)
cl-destructuring-bind
макрос. Крім того, чи дійсно ви мали намір використовуватиsetq
всерединіdefun
?setq
створює "спеціальну" (глобально доступну) змінну - те, що ви зазвичай розміщуєте поза функцією (тому що мало декларувати одну і ту ж змінну більше ніж один раз, тоді як функції призначені для запуску більше одного разу).