'Значение символа как переменной недействительно:' при использовании параметра по умолчанию внутри лямбда - PullRequest
1 голос
/ 09 мая 2020

Я хотел бы сделать эту функцию более короткой для привязки клавиш.

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

затем я пишу более короткую функцию с двумя параметрами (привязка клавиш и имя приложения)

(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

1 Ответ

1 голос
/ 09 мая 2020

Тело lambda не оценивается. Используя обратную кавычку, в полученное выражение можно подставить значение command.

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