如何在DML中批量处理模板参数?解决标识符未知编译报错
DML模板参数批量处理问题解决方法
问题场景
你定义了两个带参数的DML模板:
template some_template { param some_param default false; } template another_template { param some_param default false; }
想要批量将这两个模板的some_param设置为true,尝试了两种写法:
第一种写法:
param templates_to_work_with = [some_template, another_template]; in each (each in (templates_to_work_with)) { param some_param = true; }
第二种写法:
param templates_to_work_with = [some_template, another_template]; method set_true() { foreach tmpl in (templates_to_work_with) { tmpl.some_param = true; } }
但编译时出现错误:
In templates_to_work_with error: unknown identifier: 'some_template'
错误原因
DML中模板本身不是可直接引用的普通标识符,直接将some_template放入列表的写法,编译器会把它当作未定义的变量,因此抛出"未知标识符"错误。要操作模板,必须通过template_ref类型获取模板的引用对象。
正确实现方式
方式1:使用template_ref结合方法批量修改
通过template_ref()包装模板,将其转换为可操作的引用对象,再遍历修改参数:
template some_template { param some_param default false; } template another_template { param some_param default false; } // 用template_ref声明模板引用列表 param templates_to_work_with = [template_ref(some_template), template_ref(another_template)]; method set_true() { foreach tmpl_ref in (templates_to_work_with) { // 通过模板引用访问并修改参数 tmpl_ref.param.some_param = true; } }
方式2:用in each批量设置模板默认参数
如果需要在模板实例化前统一修改默认参数值,可以结合in each和template_ref:
template some_template { param some_param default false; } template another_template { param some_param default false; } param templates_to_work_with = [template_ref(some_template), template_ref(another_template)]; // 遍历模板引用,批量设置参数默认值 in each (tmpl_ref in templates_to_work_with) { tmpl_ref.param.some_param = true; }
补充:如果操作模板实例
如果已经实例化了模板对象,也可以直接遍历实例列表修改参数:
// 先实例化模板 inst some_inst is some_template; inst another_inst is another_template; param template_instances = [some_inst, another_inst]; method set_instance_params() { foreach inst in (template_instances) { inst.some_param = true; } }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

