То, что я подразумеваю под «прозрачной« проходной »функцией-оберткой», - это функция, давайте назовем ее wrapper
, которая возвращает результат передачи всех своих аргументов какой-то другой функции, давайте назовем ее wrappee
.
Как это делается в Emacs Lisp?
NB: Идеальная wrapper
функция агностик о в wrappee
подписи функции в; то есть он ничего не знает о количестве, позициях, именах и т. д. wrappee
аргументов России; он просто передает все свои аргументы wrappee
, как если бы wrappee
он был первоначально вызван. (Однако нет необходимости связываться со стеком вызовов, чтобы заменить вызов на wrapper
вызов wrappee
.)
Я разместил частичный ответ на мой вопрос:
(defun wrapper (&rest args) (apply 'wrappee args))
Это работает только тогда, когда неwrappee
является интерактивным. Очевидно, способ, которым интерактивные функции получают свои аргументы, представляет собой «канал», отличный от того, что описывается в заклинании. Поэтому мне по-прежнему нужен равноагностический аналог сигнатуры для случая, когда есть интерактивная функция.(&rest args)
wrappee
(&rest args)
wrappee
(Этот вопрос был мотивирован проблемой, описанной в этом предыдущем вопросе .)
В случае, если необходимо дальнейшее разъяснение того, что я запрашиваю, ниже приведены несколько примеров, показывающих эквиваленты Python и JavaScript того, что мне нужно.
В Python пара стандартных способов реализации такой оболочки показана ниже:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Здесь *args
означает «все позиционные аргументы» и **kwargs
«все ключевые аргументы».)
Эквивалент JavaScript будет примерно таким:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Для справки , я не согласен, что этот вопрос является дубликатом Как применить mapcar к функции с несколькими аргументами . Я затрудняюсь объяснить, почему, поскольку эти два вопроса кажутся мне совершенно разными. Это все равно, что спросить: «Объясните, почему яблоко не следует считать эквивалентом апельсина». Простой вопрос настолько сумасшедший, что можно сомневаться в том, что кто-то может придумать ответ, который удовлетворил бы того, кто его спрашивал.
advice
материал достаточно проблематичным, поэтому предпочел бы избежать этого. На самом деле, мотивом для этого вопроса была попытка найти решение неразрешимой проблемы, которую я имею, с помощью рекомендованной функции ...
interactive
спецификации.