สิ่งที่ฉันหมายความโดย "โปร่งใส 'ผ่าน' ฟังก์ชั่นเสื้อคลุม" คือฟังก์ชั่นขอเรียกมันwrapper
ว่าผลตอบแทนที่เป็นผลมาจากการส่งผ่านอาร์กิวเมนต์ทุกฟังก์ชั่นอื่น ๆ wrappee
บางอย่างที่ขอเรียกว่า
วิธีนี้ทำได้ใน Emacs Lisp
หมายเหตุ: wrapper
ฟังก์ชั่นในอุดมคตินั้นไม่เชื่อเรื่องพระเจ้าเกี่ยวกับwrappee
ลายเซ็นของฟังก์ชัน กล่าวคือไม่ทราบจำนวนตำแหน่งตำแหน่ง ฯลฯ ของwrappee
ข้อโต้แย้ง มันเพิ่งผ่านการขัดแย้งทั้งหมดของมันไปwrappee
เช่นเดียวกับที่wrappee
ได้รับการเรียกเดิม (ไม่จำเป็นต้องยุ่งกับ call stack เพื่อแทนที่ call to wrapper
ด้วย call to wrappee
)
ฉันโพสต์คำตอบบางส่วนสำหรับคำถามของฉัน:
(defun wrapper (&rest args) (apply 'wrappee args))
นี้จะทำงานเฉพาะเมื่อwrappee
เป็นไม่โต้ตอบ เห็นได้ชัดว่าวิธีการที่ฟังก์ชั่นโต้ตอบได้รับข้อโต้แย้งของพวกเขาแสดงให้เห็นถึง "ช่องทาง" ที่แตกต่างจากสิ่งที่ครอบคลุมโดย(&rest args)
คาถา สิ่งที่ฉันยังต้องการคือwrappee
คู่ที่เท่าเทียมกันของ(&rest args)
ลายเซ็นสำหรับกรณีที่wrappee
มีฟังก์ชั่นแบบโต้ตอบ
(คำถามนี้เกิดจากปัญหาที่อธิบายไว้ในคำถามก่อนหน้านี้ )
ในกรณีที่ต้องการคำชี้แจงเพิ่มเติมเกี่ยวกับสิ่งที่ฉันขอเป็นด้านล่างเป็นตัวอย่างสองประการแสดง Python และ JavaScript ที่เทียบเท่ากับสิ่งที่ฉันต้องการ
ใน Python สองสามวิธีมาตรฐานในการใช้ wrapper ดังแสดงด้านล่าง:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(นี่*args
หมายถึง "อาร์กิวเมนต์ตำแหน่งทั้งหมด" และ**kwargs
หมายถึง "อาร์กิวเมนต์คำหลักทั้งหมด")
จาวาสคริปต์ที่เทียบเท่าจะเป็นดังนี้:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
สำหรับบันทึกฉันไม่เห็นด้วยว่าคำถามนี้ซ้ำกับวิธีใช้ mapcar กับฟังก์ชันที่มีอาร์กิวเมนต์หลายตัว ฉันสูญเสียที่จะอธิบายว่าทำไมเพราะทั้งสองคำถามดูแตกต่างจากฉันอย่างเห็นได้ชัด มันเหมือนถูกถามว่า "อธิบายว่าทำไมแอปเปิ้ลไม่ควรพิจารณาเทียบเท่ากับส้ม" คำถามเพียงอย่างเดียวก็บ้าไปหมดแล้วมีใครสงสัยว่าจะมีคำตอบที่จะตอบสนองคนที่ถาม
advice
สิ่งที่เป็นปัญหามากพอที่ฉันจะค่อนข้างชัดเจน ในความเป็นจริงแรงจูงใจสำหรับคำถามนี้ก็พยายามที่จะหาวิธีการแก้ปัญหาที่ยากเป็นอย่างอื่นที่ฉันมีกับฟังก์ชั่นแนะนำเป็นที่ ...
interactive
ข้อมูลจำเพาะ