Можно ли назначить несколько возвращаемых значений непосредственно переменным, не проходя временную переменную в 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
создает «специальную» (глобально доступную) переменную, которую вы обычно помещаете вне функции (поскольку нет смысла объявлять одну и ту же переменную более одного раза, в то время как функции предназначены для запуска более одного раза).