LISP: Как я могу завладеть созданным экземпляром внутри инициализации-инстанции: вокруг метода

StackOverflow https://stackoverflow.com/questions/5817100

  •  26-10-2019
  •  | 
  •  

Вопрос

Я хочу создать (:: вокруг квалифицированного) специалиста по инициализации-инстанции для класса X, который сначала вызовет мета-метод, а затем назовет макияж другого класса, предоставив его созданным экземпляром X. Как я могу Получите удержание созданного экземпляра внутри инициализации-инстанции: вокруг метода? (Предполагая, конечно, после того, как позвонил в Next-Method, поэтому мы находимся на стороне заполнения: вокруг)

РЕДАКТИРОВАТЬ: класс A имеет двунаправленную связь с классом B через слот в каждом, который сохраняет идентификатор другого, но класс A требует идентификатора класса B, в то время как обратное не требуется. Итак, поток, который я хочу:

  1. Make-Instance 'Classa
  2. Внутри инициализации-инстанции: вокруг класса я бы имел:

    я. Make-Instance Classb и Aquire Id-Of-B.

    II CALL-NEXT-METHOD Добавление идентификатора B-B

    III Установите соответствующий слот Classb Point в наш созданный экземпляр класса (это мой первоначальный вопрос).

Теперь я мог бы сделать [i] в: до и [iii] в: после, но я не могу: классы A и B являются постоянными классами через слона, и я хочу обернуть весь поток в транзакции, которую я не хотел бы охватывать много методов Анкет Для тех, кто знаком со слоном, я хочу использовать обертку обеспечения транзакции, и я не хочу использовать явные вызовы функций Begint и Comful в разных точках.

Это было полезно?

Решение

Экземпляр передается как первый аргумент initialize-instance.

(defmethod initialize-instance :around ((created myclass) ...)
  ;; do something with created
  created)

Другие советы

Вы обычно делаете это с :after метод, а не :around метод Если вы не будете глубоко возиться в кишечнике Clos, не имеет большого смысла делать что -либо с ненициализированным экземпляром. Экземпляр предоставлен как первый аргумент initialize-instance.

Для более глубокого обращения, посмотрите на CLHS, раздел 7.1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top