CLOS: Что я здесь делаю, устанавливая слот в метаклассе?
(ql:quickload :postmodern)
(defpackage :test-case
(:use :cl)
(:import :pomo))
(in-package :test-case)
;; (defclass dao-class (standard-class)
;; ((direct-keys :initarg :keys :initform nil :reader direct-keys)
;; (effective-keys :reader dao-keys)
;; (table-name)
;; (column-map :reader dao-column-map))
;; (:documentation "Metaclass for database-access-object classes."))
(defclass definition ()
((id :col-type serial :reader definition-id)
(content :col-type string :initarg :content :accessor definition-content)
(word :col-type string :initarg :word :accessor definition-word))
(:metaclass dao-class)
(:keys id))
(pomo:dao-keys 'definition)
;; => (ID)
;; What I am setting with :keys? a slot in the meta class?
1 ответ
Решение
dao-class
имеет слот direct-keys
, чья :initarg
назван :keys
Итак, если я правильно понимаю ваш вопрос, ответ будет: "Да, (:keys id)
обеспечивает значение для direct-keys
слот в мета-классе dao-class
".
РЕДАКТИРОВАТЬ Чтобы быть более точным, здесь, так как формулировка не совсем понятна... dao-class
является метаклассом, т. е. классом, экземплярами которого являются сами классы. В этом случае класс definition
это пример dao-class
, который имеет слот direct-keys
(объявлено в dao-class
), и значение этого слота в definition
инициализируется из значения, предоставленного через :keys
вариант.