как уменьшить список объектов без использования функции - PullRequest
1 голос
/ 07 февраля 2012

Я получил список Объектов класса B (B наследуется от A). Как я могу уменьшить все B-объекты до A-объектов, не используя функцию для извлечения необходимой информации и создания нового экземпляра?

(defclass A () ( (varI :initarg :varI :accessor varI) ) )

(defclass B (A) ( (varII :initarg :varII :accessor varII) ) )

(defun generate-list-of-type-B-objects () (....does...some..stuff....))

(defvar *listoftypeA* (generate-list-of-type-B-objects) )

(я знаю, этот пример легко переписать, так как я мог бы заставить метод генерировать список объектов типа A, но функция используется где-то еще, где нужны объекты типа B, и я не хочу дублировать код )

1 Ответ

2 голосов
/ 07 февраля 2012

Если вам абсолютно необходимо преобразовать ваши экземпляры класса B в экземпляры класса A, вы можете выполнить их одностороннее преобразование с использованием CHANGE-CLASS .Это необратимое изменение каждого экземпляра.

Поскольку я не на 100% уверен в том, что вы на самом деле хотите, лучшее предложение, которое я могу дать, это «попытались ли вы оставить их как класс B и посмотреть, работает ли это? "

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

...