Макрос із зануренням призводить до помилки "Значення символу як змінної - недійсне" при компіляції байтів


13

У двох своїх пакунках у мене є макрос, де тіло залежить від змінної, визначеної у defcustomформі.

Під час встановлення пакунків від Melpa компіляція байтів закінчується:

Помилка: значення символу як змінної - недійсне: my-defcustom-змінна

Потім файл вручну виконує байтове збирання, відкриваючи його в буфері.

Я спробував із autoloadфайлом cookie, але все ще маю таку ж поведінку.

Я тут пропускаю щось важливе.


1
Залежно від атрибуту defcustomв макросі - це дивна річ, бо defcustomволя набуває чинності лише під час компіляції байтів (де макрос розширений). Це, здається, не має для мене особливого сенсу.
місячник

Дякую Себастьян, ти маєш рацію, і це пояснює багато речей.
syl20bnr

Відповіді:


15

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.