"투명한 '통과'함수 래퍼"가 의미하는 것은 함수입니다. 호출 해 봅시다. wrapper
모든 인수를 다른 함수에 전달한 결과를 반환합니다 wrappee
.
Emacs Lisp에서이 작업은 어떻게 이루어 집니까?
주의 : 이상적인 wrapper
함수는 함수의 서명 에 대해 불가지론 적 입니다 wrappee
. 즉, 그것은 wrappee
논증 의 수, 위치, 이름 등을 전혀 모른다 . wrappee
마치 wrappee
원래 호출 된 것처럼 모든 인수를에 전달합니다 . (필요에 전화를 대체하기 위해 호출 스택 엉망에, 그러나, 없다 wrapper
를 호출 wrappee
.)
내 질문에 부분 답변을 게시했습니다 .
(defun wrapper (&rest args) (apply 'wrappee args))
대화 형 wrappee
이 아닌 경우에만 작동합니다 . 분명히 대화 형 함수가 인수를 얻는 방식은 (&rest args)
주문 에서 다루는 것과 다른 "채널"을 나타냅니다 . 그러므로, 여전히 필요한 것은 대화식 기능 이있는 경우 wrappee
에 대한 (&rest args)
서명 과 동일하게 독립적 입니다.wrappee
(이 질문은이 이전 질문 에서 설명한 문제에 의해 유발되었습니다 .)
내가 요구하는 것에 대한 추가 설명이 필요한 경우, 다음은 몇 가지 예입니다. 필요한 파이썬과 JavaScript를 보여줍니다.
파이썬에서 이러한 래퍼를 구현하는 몇 가지 표준 방법은 다음과 같습니다.
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
사양 을 제공해야합니다 .