Макрос с defcustom приводит к ошибке «Значение символа, поскольку переменная пуста» при байтовой компиляции


13

В двух моих пакетах у меня есть макрос, тело которого зависит от переменной, определенной в defcustomформе.

При установке пакетов из Melpa байт-компиляция заканчивается:

Ошибка: значение символа в качестве переменной недействительно: my-defcustom-variable

Затем вручную выполняется байтовая компиляция файла, открывая его в буфере.

Я пытался с autoloadcookie, но по-прежнему такое же поведение.

Я здесь упускаю что-то важное.


1
defcustomСтранно делать зависимость от тела макроса, поскольку defcustomзавещание вступает в силу только во время байтовой компиляции (когда макрос раскрывается). Это не имеет особого смысла для меня.
lunaryorn

Спасибо, Себастьян, вы правы, и это многое объясняет.
syl20bnr

Ответы:


15

defcustomВыражение не вычисляется во время компиляции байт-, поэтому , когда макрос расширяются, переменная еще не существует , потому что defcustom был составлен , но не запускается. Вы можете переместить defcustom в другой файл (который вы затем requireв начале вашего файла), или вы можете обернуть defcustom внутри eval-and-compile.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.