Еще один глупый вопрос.
Допустим, в пакете A объявлен класс
(defclass my-class ()
((my-field :accessor my-field
:initarg my-field)))
Пакет экспортирует символы my-class и my-field.
Вопрос: можно ли в пакете B инстанциировать класс с помощью make-instance, если в нем используется пакет A?
При попытке это сделать
(make-instance 'my-class :my-field <my-value>)
CLISP говорит, что
Illegal keyword/value pair :MY-FIELD, #<some object> in argument list.
The allowed keywords are #1=(A:MY-FIELD ...)
И даже непонятно префикс пакета как указывать для keyword символов.
Выход из этой ситуации можно найти, определив генерик-метод с теми же keyword параметрами как и при создании класса, но как-то некрасиво это...
uncommand пишет:
> Допустим, в пакете A объявлен класс
>
> (defclass my-class ()
> ((my-field :accessor my-field
> :initarg my-field)))
:initarg :my-field
должно быть. Нет ?
> Пакет экспортирует символы my-class и my-field.
> Вопрос: можно ли в пакете B инстанциировать класс с помощью
> make-instance, если в нем используется пакет A?
Можно.
> При попытке это сделать
>
> (make-instance 'my-class :my-field <my-value>)
Всегда можно сделать так
(make-instance 'A::my-class :my-field <my-value>)
> CLISP говорит, что
>
> Illegal keyword/value pair :MY-FIELD, #<some object> in argument list.
> The allowed keywords are #1=(A:MY-FIELD ...)
Ну у вас :initarg неправильный, нету у вас инитарга :MY-FIELD.
У вас MY-FIELD — из вашего пакета.
> И даже непонятно префикс пакета как указывать для keyword символов.
Никак. Невозможно.
Posted via RSDN NNTP Server 2.1 beta
uncommand пишет:
> Здравствуйте, MasterZiv, Вы писали:
>
> Понятно, вот так сработало
>
> (make-instance 'my-class 'my-field <my-value>)
Это неправильно, тебе надо поменять :initarg на символ из пакета :KEYWORD.
Ну то есть так ТОЖЕ может работать, но так не делают.
Posted via RSDN NNTP Server 2.1 beta