【问题标题】:MOP: acess any slot definition ? (mito's col-type)MOP:访问任何插槽定义? (mito's col-type)
【发布时间】:2018-05-11 10:16:38
【问题描述】:

我定义了一个使用 Mito ORM 的类,插槽定义了一个:col-type

(isbn
 :accessor isbn
 :initarg :isbn
 :col-type (or (:varchar 128) :null))

如何获得:col-type 定义?由于这是我的类定义中的一个插槽,是否没有通用的方法来访问它,例如 slot-definition :col-type ...

clos-mop documentation上,我只找到如何访问

slot-definition-allocation
slot-definition-initargs
slot-definition-initform
slot-definition-initfunction
slot-definition-name
slot-definition-type

isbn 槽显示如下:

#<MITO.DAO.COLUMN:DAO-TABLE-COLUMN-CLASS {1005928483}>
--------------------
Name: BOOKSHOPS.MODELS:ISBN
Init args: (:ISBN)
Init form: #<unspecified>
Init function: NIL
--------------------
Group slots by inheritance [ ]
Sort slots alphabetically  [X]

All Slots:
[ ]  %CLASS           = #<DAO-TABLE-CLASS BOOK>
[ ]  %DOCUMENTATION   = NIL
[ ]  %TYPE            = T
[ ]  ALLOCATION       = :INSTANCE
[ ]  ALLOCATION-CLASS = NIL
[ ]  COL-TYPE         = (OR (:VARCHAR 128) :NULL)
[ ]  DEFLATE          = #<unbound>
[ ]  GHOST            = NIL
[ ]  INFLATE          = #<unbound>
[ ]  INITARGS         = (:ISBN)
[ ]  INITFORM         = NIL
[ ]  INITFUNCTION     = NIL
[ ]  NAME             = BOOKSHOPS.MODELS:ISBN
[ ]  PRIMARY-KEY      = NIL
[ ]  READERS          = (BOOKSHOPS.MODELS:ISBN)
[ ]  REFERENCES       = NIL
[ ]  WRITERS          = ((SETF BOOKSHOPS.MODELS:ISBN))

谢谢。

【问题讨论】:

    标签: common-lisp clos mop


    【解决方案1】:

    col-typemito.class.column:table-column-class 提供的扩展。它有一个访问器%table-column-type,由mito.class.column:table-column-type 包裹。

    【讨论】:

    • "当然你不能在 MOP 文档中找到它"当然!但它是我的类定义中的一个插槽,是否没有通用的方法来访问任何插槽详细信息?我错过了拖把的目标吗?无论如何,谢谢。
    • 你是对的,这留下了一些程序化的可发现性。但是,您可以尝试使用(class-slots (class-of isbn-slot)) 找到col-type 插槽,然后使用slot-definition-readersslot-definition-writers。一直都是物体。
    • 抱歉,我删除了这句话,因为它听起来比预期的要讽刺得多。
    猜你喜欢
    • 2019-02-20
    • 2019-07-08
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多