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에 익숙하다)
@wvxvw 감사합니다! 예
—
Håkon Hægland
let
, 함수 내부에서 사용하는 것을 잊었습니다 . 전역 변수를 설정하지 않았습니다. :)
cl-destructuring-bind
매크로를 사용해보십시오 . 또한 실제로setq
내부 에서 사용하려고defun
했습니까?setq
함수가 두 번 이상 실행되도록 의도 된 반면 같은 변수를 두 번 이상 선언하는 데 의미가 거의 없기 때문에 일반적으로 함수 외부에 놓이는 "특수"(전역 적으로 액세스 가능한) 변수를 만듭니다.