我想为一个类X创建一个initialize-instance的(:around限定)特化器,它将首先调用-next-method,然后调用另一个类的make-instance,为它提供X的创建实例。我如何才能在initialize-instance:around方法中获得创建的实例?(当然假设在调用了call-next-method之后,所以我们在:around的结束端)
编辑:类A与类B通过各自插槽中保留对方id的方式建立双向关系,但类A需要类B的id,而类B则不需要。所以我想要的流是:
- make-instance"classA
-
在initial -instance:around classA中,我将使用:
。make-instance classB and acquire id-of-B.
ii call-next-method添加id-of-B
我将类b点对应的id-of-A插槽设置为我们创建的类a实例(这是我最初的问题原因)
现在我可以在:before中执行[I],在:after中执行[iii],但是我不能:类A和类B是持久化类,我想把整个流封装在一个事务中,我不想跨越许多方法。对于那些熟悉大象的人来说,我想使用确保事务包装器,并且我不想在不同的点使用显式的开始和提交函数调用。
实例作为initialize-instance
的第一个参数传递。
(defmethod initialize-instance :around ((created myclass) ...)
;; do something with created
created)
您通常会使用:after
方法来执行此操作,而不是:around
方法。除非您深入研究CLOS的核心,否则对未初始化的实例做任何事情都没有多大意义。实例作为initialize-instance
的第一个参数提供。
有关更深入的处理,请参阅CLHS,第7.1节。