introspection - Eiffel:内省的文档和调用者类
问题描述
我在哪里可以找到有关 Eiffel 内省的文档?
某些函数可以在GENERAL 类中调用
我正在寻找调用者的类名来修改记录器的格式化程序
就像是:
Current.generator_client_object.class_name
解决方案
可以使用 查找对象的类名generator
。更详细的信息可以通过其他方式获得,从高到低排序:
- 调用
generating_type
返回类型对象的功能TYPE
- 使用类的后代
REFLECTED_OBJECT
(有参考对象和扩展对象的版本)来挖掘对象结构 - 使用类
REFLECTOR
或INTERNAL
用于具有较少抽象的较低级别的操作
没有标准机制来获取当前执行功能或其调用者的详细信息。仍然可以从异常堆栈跟踪中获取此信息。思路如下:
- 添加一个实际进行日志记录的功能。
- 向此功能添加一些将引发异常的代码。
- 在功能的救援子句中捕获异常。
- 解析使用
{EXCEPTION}.trace
一级或二级检索的堆栈跟踪(需要进行一些实验才能获得正确的结果)。 - 记录有关调用者的信息(类 + 功能 + 停止点编号)。
虽然这是可行的,但性能将是一个问题,因为异常处理和解析是缓慢的操作。
推荐阅读
- c - C:如何逐字节读取文件(任何格式)?
- python - 此错误“ smtplib.SMTPAuthenticationError: (535, b'5.7.8 用户名和密码不被接受
- python - 使用 Apache Superset 实现 OpenID。AttributeError:“布尔”对象没有属性“is_active”
- java - 通过 Rest Template 从外部源获取数据的问题
- git - GitKraken - 默认推送到远程源中的文件夹
- python - 在 2d + time Dask 堆栈上使用 openpiv 及时计算两个后续图像之间的运动
- jquery - jQuery 选项卡导航 - 禁用第一个和最后一个箭头
- excel - 将表格从 Word (.docx) 提取到 Excel
- r - ggplot 文本渲染不适用于某些字体
- python - AttributeError:'bytes'对象在python中从GCS读取.gz文件时没有属性'read'