首页 > 解决方案 > Eiffel:内省的文档和调用者类

问题描述

我在哪里可以找到有关 Eiffel 内省的文档?

某些函数可以在GENERAL 类中调用

我正在寻找调用者的类名来修改记录器的格式化程序

就像是:

Current.generator_client_object.class_name

标签: introspectioneiffel

解决方案


可以使用 查找对象的类名generator。更详细的信息可以通过其他方式获得,从高到低排序:

  • 调用generating_type返回类型对象的功能TYPE
  • 使用类的后代REFLECTED_OBJECT(有参考对象和扩展对象的版本)来挖掘对象结构
  • 使用类REFLECTORINTERNAL用于具有较少抽象的较低级别的操作

没有标准机制来获取当前执行功能或其调用者的详细信息。仍然可以从异常堆栈跟踪中获取此信息。思路如下:

  1. 添加一个实际进行日志记录的功能。
  2. 向此功能添加一些将引发异常的代码。
  3. 在功能的救援子句中捕获异常。
  4. 解析使用{EXCEPTION}.trace一级或二级检索的堆栈跟踪(需要进行一些实验才能获得正确的结果)。
  5. 记录有关调用者的信息(类 + 功能 + 停止点编号)。

虽然这是可行的,但性能将是一个问题,因为异常处理和解析是缓慢的操作。


推荐阅读