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 wrapper
adalah agnostik tentang wrappee
tanda tangan fungsi; yaitu tidak mengetahui jumlah, posisi, nama, dll. dari wrappee
argumen; itu hanya meneruskan semua argumennya wrappee
, seolah-olah wrappee
telah menjadi yang awalnya disebut. (Namun, tidak perlu untuk mengacaukan tumpukan panggilan untuk mengganti panggilan wrapper
dengan panggilan ke wrappee
.)
Saya mengirim sebagian jawaban untuk pertanyaan saya:
(defun wrapper (&rest args) (apply 'wrappee args))
Ini hanya bekerja jika wrappee
ini 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- wrappee
mitra -agnostic dari (&rest args)
tanda tangan untuk kasus di mana wrappee
merupakan 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 *args
singkatan dari "semua argumen posisi", dan **kwargs
singkatan 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.
advice
hal - 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 ...
interactive
spek.