应用由关键字确定的其他函数的函数或宏
Function or Macro to Apply Other Functions Determined by Keywords
我希望能够编写如下函数:
(dispatchme :foo)
然后执行:
(foo!)
其中冒号的冒号已经从关键字中剥离出来并且(在本例中)和感叹号被添加以确定最终的函数名称。 foo!
是单独定义的,我想避免使用某种调度 table,例如使用 cond
或 hash-table
- 可能有多个 keyword/function原则上成对。
如果您假设遵守您暗示的约定,您可以简单地这样做,但您需要考虑包。我假设你在一个特殊变量中有它,但也许你想要 *package*
(即 运行 时间的当前包)或 #.*package*
(即读取时的当前包)那里:
(defun call-by-key (keyword)
(funcall (intern (concatenate 'string (symbol-name keyword) "!")
*special-package*)))
但是,我看到的唯一合理的用例是在读取函数调用时尚未创建所需的包,即。 e.在系统定义 (ASDF) 中。所以,我的问题是:你想做什么?
我希望能够编写如下函数:
(dispatchme :foo)
然后执行:
(foo!)
其中冒号的冒号已经从关键字中剥离出来并且(在本例中)和感叹号被添加以确定最终的函数名称。 foo!
是单独定义的,我想避免使用某种调度 table,例如使用 cond
或 hash-table
- 可能有多个 keyword/function原则上成对。
如果您假设遵守您暗示的约定,您可以简单地这样做,但您需要考虑包。我假设你在一个特殊变量中有它,但也许你想要 *package*
(即 运行 时间的当前包)或 #.*package*
(即读取时的当前包)那里:
(defun call-by-key (keyword)
(funcall (intern (concatenate 'string (symbol-name keyword) "!")
*special-package*)))
但是,我看到的唯一合理的用例是在读取函数调用时尚未创建所需的包,即。 e.在系统定义 (ASDF) 中。所以,我的问题是:你想做什么?