macro.el
ใช้แมโครตัวอย่างต่อไปนี้ที่กำหนดไว้ใน
(defmacro some-macro (&rest body)
`(let ((some-variable 1))
,@body))
และสามารถใช้ฟังก์ชั่นดังต่อไปนี้กำหนดไว้ในแฟ้มที่แตกต่างกันfunction.el
,
(defun some-function ()
(some-macro (do-something)))
เมื่อfunction.el
ใดที่คอมไพล์ด้วยไบต์จะsome-variable
ถูกผูกไว้ภายใต้การรวมคำหรือแบบไดนามิก?
ฉันเข้าใจว่าสิ่งนี้ขึ้นอยู่กับว่าไฟล์นั้นใช้-*- lexical-binding: t; -*-
หรือไม่ดังนั้นคำถามของฉันเกี่ยวกับสถานการณ์ต่อไปนี้โดยเฉพาะ:
- หาก
function.el
ใช้การเชื่อมศัพท์ แต่macro.el
ไม่ - หาก
macro.el
ใช้การเชื่อมศัพท์ แต่function.el
ไม่
มันสร้างความแตกต่างถ้าsome-var
มีการประกาศทั่วโลก (มี defvar) ภายในfunction.el
? ถ้าไม่ฉันสนใจโดยเฉพาะในกรณีที่มันไม่ได้
ฉันคิดว่า Jisang Yoo พูดถึงเรื่องนี้อย่างละเอียดในyoo2080.wordpress.com/2013/08/14/…
—
phils
ฉันไม่รู้แน่ชัด แต่ฉันพนันได้เลยว่าการขยายมาโครสืบทอดความหมายการเชื่อมโยงจากไซต์ส่วนขยายไม่ใช่จากคำจำกัดความของแมโคร ที่เหมาะสมเนื่องจากการขยายตัวถูกแทนที่จริงที่ไซต์การโทร แต่: ทำไมคุณถึงอยากรู้? คุณตั้งใจจะเขียนรหัสที่ใช้รายละเอียดเหล่านี้จริงหรือ!
—
Lunaryorn
@Malabarba เขียนแมโครของคุณในแบบที่ไม่ต้องพึ่งพาการเชื่อมโยงในบัฟเฟอร์เป้าหมายแล้ว หรือดีกว่านั้นอย่าใช้มาโครเลย
—
Lunaryorn
@ Lunaryorn ฉันไม่ค่อยชัดเจน มาโครเป็นเพียงรูปแบบให้และทำงานตามที่โฆษณาไว้อย่างใดอย่างหนึ่ง ฉันต้องการตรวจสอบให้แน่ใจว่าแบบฟอร์มการอนุญาตนี้เป็นไปตามการกำหนดขอบเขตที่ระบุในไฟล์ที่ถูกขยายคำถามนี้เป็นส่วนหนึ่งของการค้นหาว่าเกิดขึ้นโดยอัตโนมัติหรือหากฉันต้องการรหัสในแมโคร
—
Malabarba