Anylogic中如何在一个Agent内调用另一Agent的变量?
非main层级跨代理调用变量的脚本错误说明
现存核心编写错误
- 作用域访问不符合规则
不同代理的变量默认属于自身私有作用域,在tir代理的函数内直接调用变量时,引擎只会按顺序查找tir代理自身作用域、main全局作用域下的同名变量,不会主动跨代理检索magazzini代理下的私有内容,会直接触发变量未定义的报错。 - 缺少完整的代理寻址路径
两个代理都不处于main层级下,脚本中没有写全magazzini代理的完整层级路径,既没有通过流程图内置的上下文对象获取magazzini代理的有效实例,也没有在调用变量时指定对应代理的访问前缀,执行时根本无法定位到目标变量的所属位置。 - 流程图可调用函数未声明跨代理依赖
供流程图调度的功能函数如果需要访问其他代理的资源,必须在函数定义时提前声明依赖的外部代理,否则流程图执行引擎调度该函数时,不会把magazzini代理的上下文注入到tir代理下的函数执行环境中,即使变量名书写正确也无法读取到对应值。
修正参考写法
跨代理调用变量需要先获取目标代理的实例引用,再访问对应变量,参考逻辑如下:
// 第一步:通过流程图上下文,按完整层级路径获取magazzini代理实例 const magazziniInstance = flowContext.getAgent('你的代理所在层级路径/magazzini'); // 第二步:通过代理实例访问目标变量 const needValue = magazziniInstance.你要调用的变量名;
内容的提问来源于stack exchange,提问作者Alfonso
相关产品推荐
相关产品推荐

