我所说的“透明的“传递”函数包装器”是一个函数,我们称它为“函数”,它wrapper
通过将其所有参数传递给其他函数(称为它)来返回结果wrappee
。
在Emacs Lisp中如何完成?
注意:理想的wrapper
功能与功能的签名无关wrappee
。即它不知道的参数的数量,位置,名称等wrappee
;它只是将其所有参数传递给wrappee
,就像wrappee
最初调用的那样。(不过,您无需弄乱调用堆栈,即可将调用替换wrapper
为wrappee
。)
我对我的问题发表了部分答案:
(defun wrapper (&rest args) (apply 'wrappee args))
仅当工作wrappee
是没有互动。显然,交互函数获取其参数的方式代表了与该(&rest args)
咒语所涵盖内容不同的“渠道” 。我还是需要的,因此,是一个equally- wrappee
的的-agnostic对应(&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
规格。