Що я маю на увазі під "прозорою" обгорткою функції пропуску "- це функція, назвемо її wrapper
, яка повертає результат від передачі всіх його аргументів на якусь іншу функцію, назвемо її wrappee
.
Як це робиться в Emacs Lisp?
NB: Ідеальна wrapper
функція є агностичною щодо wrappee
підпису функції; тобто він нічого не знає про кількість, позиції, імена тощо wrappee
аргументів 's; він просто передає всі свої аргументи 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
специфікацію.