我已经浏览了不同的教程和手册,但仍然无法将所有东西组合起来。
据我所知,当我需要在旧功能仍然保存时向事件添加新功能时,我通过调用add-hook
来添加钩子。从手册中关于add-hook
的条目中可以看出:
除非可选参数APPEND为非nil,否则FUNCTION将被添加到挂钩列表的开头
因此,挂钩只是一个函数列表。但这个列表是什么样子的?如何工作?从我的一点研究中,我发现除了car和cdr之外的每个cons单元还有一个不可见的未提及的插槽用于函数指针(可能是索引,这并不重要)。那么我该如何手动创建一个函数列表并执行它呢?可能使用add-to-list
函数,但我尝试的所有方法都会触发错误。此外,在手册中提到:
您可以像设置其他Lisp变量一样使用setq设置钩子变量,
这里有些问题,因为函数指针不会随着setq被复制。也就是说:
(defun myfunc1 () (message "hello"))
(setq onemorefunc 'myfunc1)
执行(onemorefunc)
后,调试器会触发,setq
将忽略指针存储的无名元素中的值。