埃菲尔铁塔:内省的文档和呼叫者类

时间:2018-10-01 11:31:24

标签: introspection eiffel

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

可以在GENERAL Class

中调用某些功能

我正在寻找调用者的类名来修改logger's格式化程序

类似:

Current.generator_client_object.class_name

1 个答案:

答案 0 :(得分:1)

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

  • 调用功能generating_type返回一个TYPE类型的对象
  • 使用类REFLECTED_OBJECT的后代(存在引用对象和扩展对象的版本)来挖掘对象结构
  • 使用类REFLECTORINTERNAL进行较少抽象的低级操作

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

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

尽管这是可行的,但是由于异常处理和解析是缓慢的操作,因此性能将成为问题。