(defmacro my-make-select-tab-func (num)
(let* ((number (eval num)) ; eval的结果是我想要的
;; (number num) ; 现在的实际结果,但会报错
(func-name (intern (format "my-select-tab-%s" number))))
`(defun ,func-name ()
(interactive)
(tab-bar-select-tab ,number))))
(dolist (i (range 0 10)) ; range是自己写的函数约等于python里的range
(my-make-select-tab-func i)) ; 好像不eval不行
想生成一些函数然后define-key
绑定掉,但发现macro不会eval参数,所以不手动eval会生成
类似my-select-tab-i
的函数。
如果手动eval了,函数生成是生成了,但是会在启动时卡顿且报一个Eager macro-expansion failure: (void-variable i)
的错误。
虽然官方不推荐这么做,gnu manual,但这里这么做我觉得比较优雅(?)
实际结果
(my-select-tab): my-select-tab
my-select-tab-i ```
我想要的
(my-selec): my-select-tab
my-select-tab-0
my-select-tab-1
my-select-tab-2
my-select-tab-3
my-select-tab-4
my-select-tab-5
my-select-tab-6
my-select-tab-7
my-select-tab-8