2
我试图动态查找,即运行你如何找到当前正在运行的功能可按名称:当前功能,此功能,电流defun定义,这-defun定义
当前函数的名称(此功能)(defun my-func() (remove-hook 'some-hook this-function) (do-something))
我试图动态查找,即运行你如何找到当前正在运行的功能可按名称:当前功能,此功能,电流defun定义,这-defun定义
当前函数的名称(此功能)(defun my-func() (remove-hook 'some-hook this-function) (do-something))
我还没有测试过这个,但为什么不写一个宏来封装你想要的?可能是像下面这样的东西?
(defmacro one-shot-hook (name hook &rest body)
`(defun ,name()
(remove-hook ',hook ',name)
,@body)
然后,例如
(macroexpand-all-1
'(one-shot-hook test c-mode-hook
(message "Yay!")))
给
(defun test nil
(remove-hook (quote c-mode-hook) (quote test))
(message "Yay!"))
(当我重新格式化它)。
这消除了需要知道你在的功能,这将需要讨厌赘言反正名的问题(我不知道它是否是可能的)。
还有一两件事,我可能会建议只是有一个标志变量设置成零开始你的代码测试,以决定是否要运行的。然后,你不必浪费时间添加和删除的钩所有的时间:结果可能会更容易定制和理解其他人使用你的代码。
我不认为这是可能的。但是,如果你描述你想要做的事情,也许我们可以建议另一种方法来做到这一点。 – Lindydancer
我想一旦运行,从钩去掉的功能。我希望尽可能使函数具有通用性。 – dericbytes