如何在initialize-instance:around方法中获得创建的实例?



我想为一个类X创建一个initialize-instance的(:around限定)特化器,它将首先调用-next-method,然后调用另一个类的make-instance,为它提供X的创建实例。我如何才能在initialize-instance:around方法中获得创建的实例?(当然假设在调用了call-next-method之后,所以我们在:around的结束端)

编辑:类A与类B通过各自插槽中保留对方id的方式建立双向关系,但类A需要类B的id,而类B则不需要。所以我想要的流是:

  1. make-instance"classA
  2. 在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节。

相关内容

  • 没有找到相关文章

最新更新