当在lambda内使用defun的参数时,'符号的值作为变量是void:'。

问题描述 投票:0回答:1

我想把这个函数设置成更短的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
emacs elisp key-bindings
1个回答
1
投票

的正文 lambda 不被评估。 使用反引号, command 可以代入所得到的表达式中。

(defun defkey-arg2 (command)
  (define-key (current-local-map)
    (kbd "s-g")
    `(lambda ()
       (interactive)
       (start-process-shell-command ,command nil ,command))))
© www.soinside.com 2019 - 2024. All rights reserved.