Ciò che intendo per "wrapper di funzioni" trasparenti "pass-through" è una funzione, chiamiamola wrapper
, che restituisce il risultato dal passaggio di tutto il suo argomento ad un'altra funzione, chiamiamola wrappee
.
Come si fa in Emacs Lisp?
NB: la wrapper
funzione ideale è agnostica rispetto alla wrappee
firma della funzione; cioè non sa nulla del numero, delle posizioni, dei nomi, ecc. degli wrappee
argomenti di; passa semplicemente tutti i suoi argomenti wrappee
, proprio come se wrappee
fosse stato quello originariamente chiamato. (Non è necessario, tuttavia, pasticciare con lo stack di chiamate per sostituire la chiamata wrapper
con una chiamata a wrappee
.)
Ho pubblicato una risposta parziale alla mia domanda:
(defun wrapper (&rest args) (apply 'wrappee args))
Funziona solo quando nonwrappee
è interattivo. Apparentemente, il modo in cui le funzioni interattive ottengono i loro argomenti rappresenta un "canale" diverso da ciò che è coperto dall'incantesimo . Ciò di cui ho ancora bisogno, quindi, è una controparte ugualmenteagnostica della firma per il caso in cui è una funzione interattiva .(&rest args)
wrappee
(&rest args)
wrappee
(Questa domanda è stata motivata da un problema descritto in questa domanda precedente .)
Nel caso in cui siano necessari ulteriori chiarimenti su ciò che sto chiedendo, di seguito sono riportati un paio di esempi, che mostrano gli equivalenti Python e JavaScript di ciò che sto cercando.
In Python sono illustrati di seguito alcuni metodi standard per implementare un tale wrapper:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Qui *args
sta per "tutti gli argomenti posizionali" e **kwargs
sta per "tutti gli argomenti delle parole chiave".)
L'equivalente JavaScript sarebbe qualcosa del genere:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Per la cronaca, non sono d'accordo sul fatto che questa domanda sia un duplicato di Come applicare mapcar a una funzione con più argomenti . Non riesco a spiegare perché, poiché le due domande sembrano così ovviamente diverse per me. È come essere chiesto "spiega perché una mela non dovrebbe essere considerata equivalente a un'arancia". La semplice domanda è così folle, che si dubita che si possa mai trovare una risposta che soddisfi la persona che la pone.
advice
cose abbastanza problematiche che preferirei starne alla larga. In effetti, la motivazione di questa domanda stava cercando di trovare una soluzione a un problema altrimenti intrattabile che ho con una funzione consigliata ...
interactive
specifica.