เป็นไปได้ไหมที่จะกำหนดค่าส่งคืนหลายค่าให้กับตัวแปรโดยตรงโดยไม่ต้องผ่านตัวแปรชั่วคราวใน 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
สร้างตัวแปร "พิเศษ" (สามารถเข้าถึงได้ทั่วโลก) สิ่งที่คุณมักจะใส่ไว้นอกฟังก์ชั่น (เพราะมีความหมายเพียงเล็กน้อยในการประกาศตัวแปรเดียวกันมากกว่าหนึ่งครั้งในขณะที่ฟังก์ชั่นตั้งใจจะทำงานมากกว่าหนึ่งครั้ง)