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