我已经构建了一个通用的agent
,它将在环境中多次实例化:
unit agent_u {
monitor : monitor_u is instance;
};
显示器会打印一些消息,例如:
unit monitor_u {
run() is also {
message(LOW, "Hello monitor!");
};
};
我想添加代理程序实例打印出来的监视器消息。例如,对于环境:
extend sys {
first_agent : agent_u is instance;
second_agent : agent_u is instance;
};
理想的输出将是这样的:
first_agent: Hello monitor!
second_agent: Hello monitor!
我在反射API中找不到与实例名称相关的任何内容...有没有办法在e中打印实例名称?
感谢您的帮助
答案 0 :(得分:2)
使用message()打印已经包含实例指针,例如:
[0] agent_u-@1: Hello monitor!
[0] agent_u-@2: Hello monitor!
您可以通过这些@ NUM 来区分。
或在邮件中包含“me.e_path()”,它将提供完整的实例路径:
message(LOW, me.e_path(), ": Hello monitor!");
[0] agent_u-@1: sys.first_agent.monitor: Hello monitor!
[0] agent_u-@2: sys.second_agent.monitor: Hello monitor!
答案 1 :(得分:1)
不确定“实例名称”究竟指的是什么,但有几点需要注意。
e_path()
的预定义any_unit
方法。
结构和单元实例有一个唯一标识符,由类型名称和唯一编号组成,由to_string()
方法返回。此唯一标识符已作为消息的一部分打印出来。
此外,您可以使用预定义的挂钩方法create_formatted_message()
,最好与定义自己的新message_format
一起使用,以自定义消息的打印方式。例如,您可以将e_path()
的结果附加到格式化的消息字符串中,如果您希望它自动显示在所有消息中。
您还可以使用short_name()
挂钩为单位提供自己的符号名称,这些名称将显示在消息中而不是to_string()
的结果中。
原则上,您也可以覆盖to_string()
本身,但这样做的效果不仅仅是消息打印输出。