(defmacro create-function (function-name)
`(defun ,function-name ()
"Say hello to world."
(interactive)
;; A heavy function body here
(message ,(symbol-name function-name))))
它演示了一个定义函数的宏。
我正在编写一个包,让用户创建一个具有所需名称和相应用法的函数。创建的函数将全局使用(换句话说,它不是特定于模式的)。但是,用户可能真的需要或可能不真正需要该功能。但是一旦他们需要,该功能需要可用。
(create-function foobar1)
(create-function foobar2)
;; ....................
(create-function foobar20)
此(create-function x)
可能会放在用户的配置文件中,并在启动时展开,以便准备该功能。所以,我认为自动加载宏是没有意义的。
但是,可能并不总是需要创建的函数,并且在用户需要时没有模式。此外,该功能并不经常使用,比如说每个会话只使用其中的三个。所以,我的想法是自动加载该功能。
与普通函数不同,此函数在宏体中定义。自动加载可能无法在运行时找到函数定义。
我还尝试制作这样的原型宏:
(defmacro create-function-prototype (function-name)
`(defun ,function-name ()
(interactive)
(create-function ,function-name)
(call-interactively (quote ,function-name)))
我的另一个想法是先创建一个没有函数体的空白函数。它似乎工作。流程是否按预期工作?
总结一下,有三个问题