Как найти пакет класса в lisp? - PullRequest
1 голос
/ 21 февраля 2012

Предположим, я хочу узнать, в каком пакете определен класс, например, say (defclass x () ()) определен в p1. Одним из способов может быть получение пакета через (symbol-package 'x). проблема с этим решением состоит в том, что x экспортируется в другой пакет p2. Любые другие предложения?

1 Ответ

1 голос
/ 22 февраля 2012

Как сказал Райнер Йосвиг, классы не определены в пакетах; символы имеют пакеты, а имя класса является символом.

Если вы хотите узнать значение *PACKAGE* во время чтения, компиляции или загрузки определения класса (которое может быть тремя различными значениями), я не верю, что есть какой-либо способ получить это, если вы не напишите код для хранения в то время.

Кроме того, это не похоже на полезную информацию. Пакет - это просто пространство имен для символов, и нет никакой причины, по которой пакет, который был текущим на момент чтения, компиляции или загрузки определения класса, должен иметь какое-либо отношение к самому классу.

Однако, если вы действительно хотите, чтобы имя класса x находилось в пакете p1, но p2 экспортирует его, вас может заинтересовать добавление x в список shadow для p1 в его defpackage форма (или после).

...