Emacs Lisp: Невозможно установить значение переменной с именем 's' - PullRequest
2 голосов
/ 04 октября 2010

Это довольно странно.Я не могу установить какое-либо значение для переменной, если она называется 's' в интерактивном сеансе:

(setq s 'foo)
=> foo

s
=> nil

Почему?

Обновление 1:

Вотвывод переменной-описания для s:

s is void as a variable.

Documentation:
Not documented as a variable.

Почему в emacs lisp не сохраняется s как глобальная переменная?

Обновление 2:

Включеновне зависимости от того, что это не происходит в ванильном emacs (имеется ввиду один из модулей, которые я загружаю в .emacs или какой-то код в .emacs).Таким образом, вопрос теперь таков:

Как будет выглядеть исходный источник, когда переменная description приводит к «<var> void как переменная»?

Я попробовал этос setq, defconst, defvar и defcustom, но ни один из них не выдал сообщение, которое я показываю.

Обновление 3:

Показанное выше сообщениесоздается, когда переменная буквально не связана (хотя это может быть fbound).

(describe-variable 'non-existent)
=> "non-existent is void as a variable.

Documentation:
Not documented as a variable."

Итак, последний вопрос: Есть ли способ предотвратить привязку определенного имени переменной?

Ответы [ 3 ]

1 голос
/ 20 августа 2013

Просто рекурсивно делите пополам ваш файл инициализации (~/.emacs), пока не найдете пол, вызывающий проблему.Если это sexp, который загружает другую библиотеку, то либо не используйте эту библиотеку, либо исправьте ее, сначала выяснив, в чем ее проблема, тем же способом: рекурсивно разделите код на части в этой библиотеке и т. Д.

Этоэто бинарный поиск, и это очень быстро.Вы можете быстро закомментировать половину, а затем 3/4, 7/8 и т. Д. Вашего файла, используя M-x comment-region (я связываю его с C-x ;).с префиксом arg, comment-region раскомментирует.

1 голос
/ 04 октября 2010

Ответ на ваш исправленный вопрос:

(defvar s)

Единственное, что это не позволит вам использовать describe-variable в интерактивном режиме.

(Вы могли бы затем сделать что-то вроде (setplist 's '(variable-documentation "Meh")), чтобы задать описание для него без прохождения defvar.

0 голосов
/ 04 октября 2010

В Emacs 23.1 при выполнении следующего кода C-h v s RET показывается, что "s void as variable."странно).

(setq s t)
(make-local-variable 's)
(makunbound 's)

Я подозреваю, что в Emacs 24 есть особенность или ошибка.

...