У меня есть список объектов класса 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))
(я знаю, что этот пример легко переписать, как я мог бы сделать метод создания списка объектов типа А, но функция используется в другом месте, где нужны объекты типа B, и я не хотите дублировать код)
Вы уверены, что имеете в виду Lisp? Ваши объявления классов ошибочны. Common Lisp не рассматривает классы как типы, которые вы думаете. В Common Lisp также нет такой вещи, как «downcasting». Общая система объектов Lisp (CLOS) работает иначе, чем объектная система на таких языках, как C++ или Java. –
Я уверен, что я это делаю, но я просто разбираюсь в lisp и поэтому используется для ООП на C++/Java, если нет способа написать «функцию каста», пожалуйста, напишите об этом, и я буду рад принять это как ответ. – Sim
Я надеялся, что не могу как-то сказать, что какой-то объект следует рассматривать так, как если бы он был там, где его суперклассовый тип и, следовательно, не имеет (неизученных) других членов-варов – Sim