![]() |
|
![]() ![]() ![]() |
|
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Доброго времени суток... Столкнулся с проблемой при использовании в макросе глобальной переменной:
делаю так, чтобы не генерировать макросом одинаковых generic'ов... Проблема в том, что данный код компилируется только после повторного объявления в REPL переменной *defined-generic-getters*, а при попытки загрузки модуля через ASDF или простой загрузки файла, выдается что переменная *defined-generic-getters* не объявлена... Можно ли как-либо с этим бороться, и если да, то как? Заранее спасибо... -------------------- ![]() |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
сейчас времени нет подробней разбираться, но можно объявлять глобальную переменную в теле макры, типа
defvar объявляет переменную в глобальном окружении, независимо от того в каком окружении вызван + не пересвязывает ее в случае повторного объявления -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
вообще должно работать нормально. какой компилятор ты юзаешь?
Это сообщение отредактировал(а) k0rvin - 17.8.2010, 20:51 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
SBCL под виндой и линуксом, и там и там поведение одинаковое...
Попробую в теле макроса объявить, отпишусь чего получится... -------------------- ![]() |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
а если такой тестовый код скомпилить:
? просто уж больно похоже, что у тебя в теле макры опечатка в имени переменной, но судя по приведённому тобой коду, опечатки нет =/ -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
adejneka |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: 9 Всего: 11 |
Выдает ошибку
Под SBCL работает такой вариант:
Правда, я не уверен, что он будет работать под Allegro CL. |
||||
|
|||||
k0rvin |
|
||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
действительно, если выполнить (load "file.lisp"), то ошибки не будет, а при (load (compile-file "file.lisp")) она появляется. причину можно увидеть так:
скорее всего будет, но можно сделать и так:
тогда переменная будет определена во время чтения до раскрытия макр времени компиляции -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||||||||
|
|||||||||||||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Спасибо за evel-when, мне кроме как под sbcl не надо... )
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума LISP | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LISP | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |