O que quero dizer com um "wrapper de função" transparente "de passagem" "é uma função, vamos chamá-lo wrapper, que retorna o resultado de passar todo o seu argumento para alguma outra função, vamos chamá-lo wrappee.
Como isso é feito no Emacs Lisp?
NB: O ideal wrapperfunção é agnóstico sobre a wrappeeassinatura de função; isto é, não sabe nada sobre o número, posições, nomes, etc. dos wrappeeargumentos de; apenas passa todos os seus argumentos wrappee, como se wrappeetivesse sido o originalmente chamado. (Porém, não é necessário mexer na pilha de chamadas para substituí-la wrapperpor uma chamada para wrappee.)
Publiquei uma resposta parcial à minha pergunta:
(defun wrapper (&rest args) (apply 'wrappee args))
Isso funciona apenas quando nãowrappee é interativo. Aparentemente, a maneira como as funções interativas obtêm seus argumentos representa um "canal" diferente do que é coberto pelo encantamento. O que eu ainda preciso, portanto, é uma contrapartida igualmente magnética da assinatura para o caso em que é uma função interativa .(&rest args)wrappee(&rest args)wrappee
(Esta pergunta foi motivada por um problema descrito nesta pergunta anterior .)
Caso seja necessário um esclarecimento adicional sobre o que estou pedindo, abaixo estão alguns exemplos, mostrando os equivalentes em Python e JavaScript do que estou procurando.
No Python, algumas maneiras padrão de implementar esse wrapper são mostradas abaixo:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Aqui *argssignifica "todos os argumentos posicionais" e **kwargs"todos os argumentos das palavras-chave".)
O equivalente a JavaScript seria algo como isto:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Para o registro, eu discordo que esta questão seja uma duplicata de Como aplicar o mapcar a uma função com vários argumentos . Não consigo explicar por que, uma vez que as duas perguntas parecem tão obviamente diferentes para mim. É como ser perguntado "explique por que uma maçã não deve ser considerada equivalente a uma laranja". A mera pergunta é tão louca que alguém duvida que possa encontrar uma resposta que satisfaça a pessoa que a pergunta.
advicecoisas suficientemente problemáticas para que eu prefira ficar longe disso. Na verdade, a motivação para esta questão estava tentando encontrar uma solução para um problema de outra forma intratável que tenho com uma função adviced ...
interactiveespecificação.