ทุกคำสั่งเป็นฟังก์ชั่น แต่ไม่ใช่ทุกฟังก์ชั่นก็เป็นคำสั่งด้วยเช่นกัน 1
คำสั่งรวมถึงการเรียกร้องให้interactive
; นี่คือสาเหตุที่คำสั่งมักเรียกกันว่า "ฟังก์ชั่นแบบโต้ตอบ" คำสั่งสามารถเรียกใช้ผ่านM-x name-of-command
RETและพวกเขายังสามารถถูกผูกไว้กับลำดับที่สำคัญ ฟังก์ชั่นปกติไม่ได้มีการเรียกไปยังinteractive
สามารถไม่ถูกเรียกใช้M-xและคุณไม่สามารถผูกไว้ในลำดับที่สำคัญ ในการใช้งานฟังก์ชั่นที่ไม่ได้มีการโต้ตอบคุณสามารถกดM-:( eval-expression
) ใส่ชื่อของฟังก์ชั่นตามด้วยค่าสำหรับอาร์กิวเมนต์ใด ๆ ที่จำเป็นต้องใส่ไว้ในวงเล็บและกดRET:
M-: (name-of-function arg1 arg2 arg3)
RET
หากฟังก์ชันไม่ควรทำงานกับบัฟเฟอร์ปัจจุบันคุณสามารถป้อนได้
(name-of-function arg1 arg2 arg3)
ใน*scratch*
บัฟเฟอร์และกดC-x C-e( eval-last-sexp
) พร้อมตำแหน่งที่อยู่หลังวงเล็บปิด
ในการทำให้ฟังก์ชันbar
พร้อมใช้งานเป็นคำสั่งคุณสามารถล้อมฟังก์ชันไว้ในฟังก์ชันโต้ตอบแบบกำหนดเอง ( foo
) ดังนี้:
(defun foo ()
(interactive)
(bar))
แน่นอนว่าหากbar
รับข้อโต้แย้งอย่างน้อยหนึ่งข้อคุณจะต้องระบุข้อโต้แย้งเหล่านั้นเพื่อให้foo
ทำงานได้อย่างถูกต้อง
หากคุณเห็นคนที่ใช้คำว่า "ฟังก์ชั่น" และ "คำสั่ง" สลับกันสิ่งนี้อาจบ่งบอกถึง (ขึ้นอยู่กับบริบท) ว่าพวกเขาไม่ได้ตระหนักถึงความแตกต่างระหว่างแนวคิดพื้นฐาน
1โปรดทราบว่าฉันกำลังพูดถึงdefun
ที่นี่ ในฐานะที่เป็น @Stefan ชี้ให้เห็นในความคิดเห็นที่มาโครแป้นพิมพ์เป็นกรณีพิเศษ: พวกเขาได้รับการพิจารณาคำสั่งแต่พวกเขาไม่ได้ทำงาน
C-h i
เลือกคู่มือ Elisp ,i command
- ทำให้คุณสิทธิในโหนดWhat is a function?
ซึ่งทำให้ทั้งหมดของคริสตัลที่ชัดเจนแบบนี้ ช่วยให้ผู้ใช้เรียนรู้ที่จะถาม Emacs (เพียงหนึ่งความเห็น.)