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