"符号作为变量的值为 void:"在 lambda 中使用参数时 defun



我想让这个函数设置keybind更短。

(defun defkey-arg2 ()
(exwm-input-set-key (kbd "s-g")
(lambda ()
(interactive)
(start-process-shell-command gkamus nil gkamus))))

然后我用2个参数(keybind和应用程序名称(编写较短的函数

(defun defkey-arg2 (key command) (...)

当我尝试将密钥作为参数时,它将工作

(defun defkey-arg2 (key)
(exwm-input-set-key (kbd key)
(lambda ()
(interactive)
(start-process-shell-command gkamus nil gkamus))))
(defkey-arg2 "s-g")

但是,当我尝试写这样的函数时

(defun defkey-arg2 (key command)

(defun defkey-arg2 (command)
(exwm-input-set-key (kbd "s-g")
(lambda ()
(interactive)
(start-process-shell-command command nil command)))
(defkey-arg2 "gkamus")

它引发错误:

Symbol's value as variable is void:' when using parameter on defun

未评估lambda的主体。使用后引号,可以将command的值代入生成的表达式中。

(defun defkey-arg2 (command)
(define-key (current-local-map)
(kbd "s-g")
`(lambda ()
(interactive)
(start-process-shell-command ,command nil ,command))))

最新更新