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 wrapper
fonction idéale est agnostique quant à la wrappee
signature de la fonction; c'est-à-dire qu'il ne sait rien du nombre, des positions, des noms, etc. des wrappee
arguments de; il transmet simplement tous ses arguments à wrappee
, comme s'il wrappee
avait été celui initialement appelé. (Il n'est cependant pas nécessaire de jouer avec la pile d'appels pour remplacer l'appel à wrapper
par 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 wrappee
n'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 wrappee
contrepartie également -agnostique de la (&rest args)
signature pour le cas où wrappee
est 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 *args
signifie "tous les arguments positionnels", et **kwargs
signifie "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.
advice
choses 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 ...
interactive
spécification.