我想为类X创建一个初始化实例的(:around qualified)特化器,它将首先调用next-method,然后调用另一个类的make-instance,为其提供创建的X实例。如何在initialize-instance:around方法中获取创建的实例? (假设当然在调用了call-next-method之后,所以我们处于:周围的结束方面)
编辑: A类与B类通过一个槽中的双向关系保持另一个的id,但A类要求B类的id,而不需要相反的。所以我想要的流程是:
在initialize-instance中:围绕classA我会:
我。 make-instance classB和aquire id-of-B。
ii call-next-method添加id-of-B
iii将classB指向的相应id-of-A插槽设置为我们创建的classA实例(这是我原来的问题原因)
现在我可以做到[i]之前和[iii] in:之后,但我不能: 类A和B是通过大象的持久类,我想将整个流包装在一个我不想跨越多种方法的事务中。对于熟悉elephant的人,我想使用ensure-transaction包装器,我不想在不同的点使用显式的begin和commit函数调用。
答案 0 :(得分:6)
该实例作为initialize-instance
的第一个参数传递。
(defmethod initialize-instance :around ((created myclass) ...)
;; do something with created
created)
答案 1 :(得分:4)
您通常使用:after
方法,而不是:around
方法。除非你深入研究CLOS的内涵,否则对未初始化的实例做任何事都没有多大意义。该实例作为initialize-instance
的第一个参数提供。
要进行更深层次的治疗,请查看CLHS, section 7.1。