Предположим, я хочу узнать, в каком пакете определен класс, например. скажем (defclass x ()()) определен в p1. Одним из способов может быть получение пакета через (symbol-package 'x). проблема с этим решением заключается в том, что x экспортируется в другой пакет p2. Любые другие предложения?
Как найти пакет класса в lisp?
Ответы (1)
Как сказал Райнер Джосвиг, классы не определяются в пакетах; символы имеют пакеты, а имя класса является символом.
Если вы хотите узнать значение *PACKAGE*
во время чтения, компиляции или загрузки определения класса (которое, предположительно, может быть тремя разными значениями), я не верю, что есть какой-либо способ получить это, если вы не напишете код для его сохранения в то время.
Кроме того, это не похоже на значимую часть информации. Пакет — это просто пространство имен для символов, и нет причин, по которым пакет, который был текущим на момент чтения, компиляции или загрузки определения класса, должен иметь какое-либо отношение к самому классу.
Однако, если вы действительно хотите, чтобы имя класса x находилось в пакете p1, но p2 экспортирует его, вам может быть интересно добавить x в shadow списка p1 в его defpackage (или после).
ensure-class
, который хранит значение *package*
где-то, например, в хеш-таблице. Вам нужно будет сделать это перед загрузкой классов, пакет которых вы хотите узнать.
- person Samuel Edwin Ward; 23.02.2012