броски крюка после самостоятельной вставки "Неверная функция" - PullRequest
0 голосов
/ 06 июня 2019
(defun foo (aa)
  (interactive)
  (progn
    (setq aa '(+ aa 1))
  ))

(defun bar ()
  (interactive)
  (setq b 6)
  (add-hook 'post-self-insert-hook (foo b)))

Вместо увеличения b elisp выдает ошибку: Invalid function: 7.Он принимает b в качестве аргумента, но только когда он равен 6, он перестает работать после приращения.Зачем?Проблема возникает с b, равным любому числу, он всегда печатает сообщение как Invalid function:b+1.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

В настоящее время в вашем коде слишком много проблем, чтобы решить их одну за другой.

Вам нужно начать с изучения работы Lisp.

В Emacs нажмите Ch i , затем нажмите Emacs Lisp Intro: (eintr) , затем продолжайте чтение.

0 голосов
/ 07 июня 2019

Как говорит sds, есть много проблем с этим кодом.

(defun foo (aa)
  (interactive)
  (progn
    (setq aa '(+ aa 1))
  ))

Эта функция кратко устанавливает переменную aa (которая является ее собственным аргументом и никогда не видна ничем вне функции) к буквально цитируемой форме (+ aa 1).Это также возвращает то же самое значение.Здесь aa является символом aa и ничего более.

(defun bar ()
  (interactive)
  (setq b 6)
  (add-hook 'post-self-insert-hook (foo b)))

(foo b) не является функцией, и поэтому добавление его в ловушку приведет к ошибке.

(lambda () (foo b)) - это функция, которая вызывает (foo b)

elisp выдает ошибку: Неверная функция: 7.

Не с кодом, который вы показали, он выиграл«т.Очевидно, вы оцениваете версию, в которой вы не цитировали (+ aa 1), и в этом случае (foo 6) фактически вернет 7, и, следовательно, вы пытаетесь сделать это:

(add-hook 'post-self-insert-hook 7)
...