AnyLogic:对象属性内this返回main时如何获取当前对象
AnyLogic对象属性配置中获取当前选中目标对象的实现
为什么this会返回main
属性配置面板里的代码段,默认的执行上下文是该属性所依附的智能体实例——也就是模型里的main或者嵌套的自定义智能体,根本不是你正在编辑的交通/流程控件,更不是你在下拉框里选中的目标对象,所以用this自然拿不到你想要的引用。
无硬编码的实现方案
- 获取当前正在配置的控件本身:直接用AnyLogic内置的
me关键字就行,完全不用手动敲对象的全路径标识。这个引用会自动匹配当前代码段所属的控件实例,不管控件嵌在哪个层级的智能体里,都不会错误指向外层main。
对应车辆触发的业务场景:你在StopLine的“车辆通过时触发”动作代码框里写vehicle.bindStopLine(me),这里的me就会直接返回当前配了触发逻辑的这根StopLine,不需要手动输入main.stopLine1这类硬编码的对象名。 - 获取属性配置项里下拉选中的外部目标对象:如果你是在自定义函数、触发动作的面板里,通过下拉框选了一个StopLine作为关联目标,不需要翻找对象路径。只要给这个关联属性设好明确的类型(比如属性类型指定为
StopLine),直接调用控件自带的get[属性名]()方法,就能拿到你下拉框里选中的实例。比如关联StopLine的属性名叫linkedStop,写getLinkedStop()就能拿到对应的StopLine对象,上下文不会跳回父级main。 - 流程块场景的适配:如果是在Process Library流程块的内嵌代码里遇到上下文偏移的问题,直接用内置的
get_MyBlock()方法,就能拿到当前正在执行代码的流程块实例,绕开默认指向智能体的this上下文。
实用提醒
别在有多层嵌套智能体的模型里写硬编码的对象全路径引用,后续只要调整模型结构、改了对象名,所有硬编码的引用都会直接报运行错误。用上面这些内置的无硬编码引用,后续挪对象、改名字的时候,引用关系会自动适配,省很多调试的功夫。
内容的提问来源于stack exchange,提问作者buckett
相关产品推荐
相关产品推荐

