Apa yang saya maksud dengan "fungsi bungkus transparan 'pass-through'" adalah fungsi, sebut saja wrapper, yang mengembalikan hasil dari meneruskan semua argumennya ke beberapa fungsi lain, sebut saja wrappee.
Bagaimana ini dilakukan di Emacs Lisp?
NB: Fungsi ideal wrapperadalah agnostik tentang wrappeetanda tangan fungsi; yaitu tidak mengetahui jumlah, posisi, nama, dll. dari wrappeeargumen; itu hanya meneruskan semua argumennya wrappee, seolah-olah wrappeetelah menjadi yang awalnya disebut. (Namun, tidak perlu untuk mengacaukan tumpukan panggilan untuk mengganti panggilan wrapperdengan panggilan ke wrappee.)
Saya mengirim sebagian jawaban untuk pertanyaan saya:
(defun wrapper (&rest args) (apply 'wrappee args))
Ini hanya bekerja jika wrappeeini tidak interaktif. Rupanya, cara fungsi interaktif mendapatkan argumen mereka mewakili "saluran" yang berbeda dari apa yang dicakup oleh (&rest args)mantera. Yang saya masih perlu, oleh karena itu, adalah equally- wrappeemitra -agnostic dari (&rest args)tanda tangan untuk kasus di mana wrappeemerupakan interaktif fungsi.
(Pertanyaan ini dimotivasi oleh masalah yang dijelaskan dalam pertanyaan sebelumnya .)
Dalam hal klarifikasi lebih lanjut tentang apa yang saya minta diperlukan, di bawah ini adalah beberapa contoh, menunjukkan setara dengan Python dan JavaScript dari apa yang saya cari.
Dengan Python beberapa cara standar untuk mengimplementasikan pembungkus seperti itu ditunjukkan di bawah ini:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Di sini *argssingkatan dari "semua argumen posisi", dan **kwargssingkatan dari "semua argumen kata kunci".)
Setara JavaScript akan menjadi seperti ini:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Sebagai catatan, saya tidak setuju bahwa pertanyaan ini adalah duplikat dari Bagaimana menerapkan mapcar ke suatu fungsi dengan banyak argumen . Saya bingung menjelaskan mengapa, karena kedua pertanyaan itu tampak sangat berbeda bagi saya. Itu seperti ditanya "jelaskan mengapa apel tidak dianggap setara dengan jeruk". Pertanyaan belaka itu sangat gila, sehingga orang ragu akan dapat menemukan jawaban yang akan memuaskan orang yang menanyakannya.
advicehal - hal yang cukup bermasalah sehingga saya lebih memilih untuk tidak melakukannya. Sebenarnya, motivasi untuk pertanyaan ini adalah mencoba menemukan solusi untuk masalah yang tidak dapat dipecahkan yang saya miliki dengan fungsi yang disarankan ...
interactivespek.