2010-10-25 3 views
4

I.e. перенос состояния от одного объекта к другому объекту, который разделяет некоторые (но не все) элементы первого объекта.Как разработчик LISP решит проблему, которую AutoMapper решает в .NET?

Я еще не применяю этот вопрос к какой-либо реальной проблеме, но, я думаю, я прошу, чтобы он почувствовал различия в подходах к решению проблем в LISP, в отличие от объектно-ориентированных языков, таких как C#.

+0

В случае, когда вам больше не нужен исходный объект после передачи, вы можете просто вызвать «change-class», чтобы изменить его класс на месте. – Ken

ответ

1

Так же, как объект является экземпляром класса, класс также является объектом, который является экземпляром класса (meta) класса. Вы можете задать каждому из своих классов список его определений слотов и сравнить два списка, чтобы найти общие черты. http://www.lisp.org/mop/concepts.html

+0

Спасибо за ссылку. Очень всеобъемлющий. – Jonathan

1

Это довольно просто.

Вы просто пишете небольшую функцию, которая смотрит, какие слоты имеют классы объектов (с помощью протокола метаобъектов) и копирует их значения. 10 строк макс.

+0

Глядя на СС, похоже, что требуемая процедура COMPUTE-SLOTS необходима, но я не уверен, как это будет использоваться. Я применил класс DEFCLASS и его экземпляр в CLISP, и появились ошибки. : -/ –

+0

Не уверен, что вы все еще ищете ответ, но вот как использовать COMPUTE-SLOTS в CLISP: http://paste.lisp.org/display/116008 Но вы, вероятно, захотите использовать CLASS-SLOTS вместо этого , Затем используйте SLOT-DEFINITION-NAME, чтобы получить имя слота. – skypher

Смежные вопросы