如何在DML 1.4中实现设备内banks的遍历?
DML 1.4 遍历设备所有Banks的正确方法
问题背景
在DML 1.2中,可直接通过全局参数banks遍历设备内的所有bank,示例代码如下:
foreach node_bank in (banks) { <some logic> }
但升级到DML 1.4后执行上述代码会报错:
error: undefined value: 'undefined'
尝试手动创建包含所有bank的列表:
param banks_list = [bank1, bank2, bank3]
会触发错误:
error: unknown identifier: 'bank1'
尝试创建存储bank的会话变量:
session bank banks_array = {bank1, bank2, bank3}
同样报错:
error: invalid data initializer: compound initializer not supported for type trait bank
正确解决方案
DML 1.4移除了全局banks变量,需通过设备根节点的类型筛选来遍历所有bank实例,有两种可靠方式:
方式1:遍历根节点子节点并筛选bank类型
foreach node in (root) { if node is a bank { // 这里编写针对bank的业务逻辑 <some logic> } }
方式2:使用类型选择器直接匹配所有bank节点
foreach node_bank in (root.*[is a bank]) { <some logic> }
错误原因解析
- 手动列表定义失败:
bank1这类标识符并非全局可见,DML中必须通过节点层级(如root.bank1)才能访问具体的bank实例,直接写bank1会被视为未定义标识符。 - 会话变量初始化失败:DML不支持用复合初始化器为
bank类型的数组赋值,且同样存在标识符不可见的问题,因此该方式无法生效。
内容的提问来源于stack exchange,提问作者odenysex
相关产品推荐
相关产品推荐

