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

13

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

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

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

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

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

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

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

Ответы:

15

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

Стефан
источник