我正在开发一个 Emacs Lisp 包,我想添加的一个特殊功能是动态定义函数的能力——它们将遵循相同的命名约定,但这将帮助我不必手动声明它们中的每一个.
举个例子,我有一个名为 exec 的基本函数,它接受一个参数,即要启动的可执行文件的名称:
(def exec (cmd)
(async-shell-command cmd "buffer"))
同时,在这种特殊情况下,我知道我将要使用的可执行文件的列表——或者更准确地说,我知道如何获取它们的列表,因为它会随着时间而改变。因此,鉴于以下可执行文件列表,我想做的是:
("a" "b" "c")
是对它们进行迭代,并为每一个创建一个名为 exec-[executable] - exec-a、exec-b、exec-c 的函数。
不幸的是,defun 不评估 NAME 参数,所以我不能动态创建函数名。
PS。exec 命令本身就足够好了——它completing-read
与提供的可执行文件列表一起使用,但我认为上面的内容会很好。