Có thể gán trực tiếp nhiều giá trị trả về cho các biến mà không cần thông qua một biến tạm thời trong Emacs Lisp không?
Ví dụ: giả sử tôi có một hàm trả về danh sách hai danh sách:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
Nếu tôi muốn gán giá trị trả về đầu tiên cho list-a
và giá trị trả về thứ hai cho list-b
, tôi có thể thực hiện việc này bằng cách sử dụng một biến tạm thời temp
, ví dụ:
(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)))
Có thể làm điều này đơn giản hơn? (Tôi đã quen với Perl và Python khi bạn không phải chỉ định một biến tạm thời)
let
bên trong hàm .. Tôi không có kế hoạch đặt bất kỳ biến toàn cục nào :)
cl-destructuring-bind
macro. Ngoài ra, bạn đã thực sự có ý định sử dụngsetq
bên trong adefun
?setq
tạo một biến "đặc biệt" (có thể truy cập toàn cầu), một cái gì đó bạn thường đặt bên ngoài một hàm (bởi vì có rất ít ý nghĩa khi khai báo cùng một biến nhiều lần, trong khi các hàm được dự định chạy nhiều hơn một lần).