Ce que je veux dire par un "wrapper de fonction transparent" pass-through "" est une fonction, appelons-la wrapper, qui renvoie le résultat du passage de tous ses arguments à une autre fonction, appelons-la wrappee.
Comment cela se fait-il dans Emacs Lisp?
NB: La wrapperfonction idéale est agnostique quant à la wrappeesignature de la fonction; c'est-à-dire qu'il ne sait rien du nombre, des positions, des noms, etc. des wrappeearguments de; il transmet simplement tous ses arguments à wrappee, comme s'il wrappeeavait été celui initialement appelé. (Il n'est cependant pas nécessaire de jouer avec la pile d'appels pour remplacer l'appel à wrapperpar un appel à wrappee.)
J'ai posté une réponse partielle à ma question:
(defun wrapper (&rest args) (apply 'wrappee args))
Cela ne fonctionne que lorsqu'il wrappeen'est pas interactif. Apparemment, la façon dont les fonctions interactives obtiennent leurs arguments représente un "canal" différent de ce qui est couvert par l' (&rest args)incantation. Ce dont j'ai encore besoin, par conséquent, est une wrappeecontrepartie également -agnostique de la (&rest args)signature pour le cas où wrappeeest une fonction interactive .
(Cette question était motivée par un problème décrit dans cette question précédente .)
Dans le cas où une clarification supplémentaire de ce que je demande est nécessaire, voici quelques exemples, montrant les équivalents Python et JavaScript de ce que je recherche.
En Python, quelques méthodes standard pour implémenter un tel wrapper sont présentées ci-dessous:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Ici *argssignifie "tous les arguments positionnels", et **kwargssignifie "tous les arguments de mots clés".)
L'équivalent JavaScript serait quelque chose comme ceci:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Pour mémoire, je ne suis pas d'accord que cette question est un doublon de Comment appliquer mapcar à une fonction avec plusieurs arguments . Je n'arrive pas à expliquer pourquoi, puisque les deux questions me semblent si différentes. C'est comme si on lui demandait "d'expliquer pourquoi une pomme ne devrait pas être considérée comme équivalente à une orange". La simple question est tellement folle, qu'on doute que l'on puisse jamais trouver une réponse qui satisfasse la personne qui la pose.
advicechoses suffisamment problématiques pour que je préfère rester à l'écart. En fait, la motivation pour cette question était d'essayer de trouver une solution à un problème autrement insoluble que j'ai avec une fonction conseillée ...
interactivespécification.