Lo que quiero decir con un "contenedor transparente de funciones de 'transferencia' 'es una función, llamémosla wrapper
, que devuelve el resultado de pasar todos sus argumentos a alguna otra función, llamémosla wrappee
.
¿Cómo se hace esto en Emacs Lisp?
Nota: la wrapper
función ideal es independiente de la wrappee
firma de la función; es decir, no sabe nada del número, las posiciones, los nombres, etc. de wrappee
los argumentos de '; simplemente pasa todos sus argumentos wrappee
, como si wrappee
hubiera sido el llamado originalmente. (Sin embargo, no es necesario meterse con la pila de llamadas para reemplazar la llamada por wrapper
una llamada a wrappee
).
Publiqué una respuesta parcial a mi pregunta:
(defun wrapper (&rest args) (apply 'wrappee args))
Esto funciona solo cuando nowrappee
es interactivo. Aparentemente, la forma en que las funciones interactivas obtienen sus argumentos representa un "canal" diferente del que cubre el encantamiento. Lo que todavía necesito, por lo tanto, es una contraparte igualmente de diagnóstico de la firma para el caso en el que es una función interactiva .(&rest args)
wrappee
(&rest args)
wrappee
(Esta pregunta fue motivada por un problema descrito en esta pregunta anterior ).
En caso de que se necesite una mayor aclaración de lo que estoy pidiendo, a continuación hay un par de ejemplos que muestran los equivalentes de Python y JavaScript de lo que busco.
En Python, se muestran a continuación un par de formas estándar para implementar dicho contenedor:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Aquí *args
significa "todos los argumentos posicionales" y **kwargs
significa "todos los argumentos de palabras clave").
El equivalente de JavaScript sería algo como esto:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Para el registro, no estoy de acuerdo con que esta pregunta sea un duplicado de Cómo aplicar mapcar a una función con múltiples argumentos . No puedo explicar por qué, ya que las dos preguntas me parecen muy diferentes. Es como preguntar "explicar por qué una manzana no debe considerarse equivalente a una naranja". La mera pregunta es tan loca que uno duda que alguna vez pueda llegar a una respuesta que satisfaga a la persona que la pregunta.
advice
cosas son lo suficientemente problemáticas como para preferir evitarlas. De hecho, la motivación para esta pregunta estaba tratando de encontrar una solución a un problema que es intratable que tengo con una función aconsejó ...
interactive
especificación.