Eiffel: документация для самоанализа и класс звонящего - PullRequest
0 голосов
/ 01 октября 2018

Где я могу найти документацию по интроспекции Эйфеля?

Некоторые функции можно вызывать в ОБЩЕМ классе

Я ищу имя класса вызывающего абонента для изменения регистратора *1008* форматера

Что-то вроде:

Current.generator_client_object.class_name

1 Ответ

0 голосов
/ 01 октября 2018

Возможно найти имя класса объекта с generator.Более подробную информацию можно получить с помощью других средств, отсортированных от более высокого уровня к более низкому уровню:

  • , вызывающего функцию generating_type, которая возвращает объект типа TYPE
  • , используяпотомок класса REFLECTED_OBJECT (существуют версии для ссылочного объекта и для расширенного объекта), чтобы копаться в структуре объекта
  • , используя классы REFLECTOR или INTERNAL для низкоуровневых манипуляций с меньшей абстракцией

Не существует стандартного механизма для получения сведений о выполняемой в данный момент функции или ее вызывающей стороне.Еще можно получить эту информацию из трассировки стека исключений.Идея заключается в следующем:

  1. Добавьте функцию, которая фактически будет вести запись в журнал.
  2. Добавьте к этой функции некоторый код, который вызовет исключение.
  3. Catchисключение в предложении восстановления функции.
  4. Анализировать трассировку стека, полученную с {EXCEPTION}.trace на один или два уровня вверх (некоторые эксперименты необходимы для получения правильного результата).
  5. Записатьинформация о вызывающем абоненте (класс + функция + номер точки останова).

Хотя это возможно, производительность будет проблемой, поскольку обработка исключений и их разбор являются медленными операциями.

...