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

Par*_*ife 2 lisp common-lisp clos

我想为类X创建一个初始化实例的(:around qualified)特化器,它将首先调用next-method然后调用另一个类的make-instance,为它提供创建的X实例.我怎么能在initialize-instance:around方法中获取创建的实例?(假设当然在调用了call-next-method之后,所以我们处于以下方面:

编辑:A类与B类的双向关系通过每个中的一个插槽保持另一个的id,但A类要求B类的id,而不需要相反的.所以我想要的流程是:

  1. make-instance'classA
  2. 在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函数调用.

Xac*_*ach 6

该实例作为第一个参数传递initialize-instance.

(defmethod initialize-instance :around ((created myclass) ...)
  ;; do something with created
  created)
Run Code Online (Sandbox Code Playgroud)

  • @Paralife`create`绑定到新创建的实例.在调用`call-next-method`之前,新创建的实例将只应用默认初始化以及上游方法(如果有)应用的初始化. (3认同)