DML1.4中无法用变量索引常量列表的解决方案咨询
DML 1.4 常量列表动态索引问题解决方案
问题本质
param类型是编译期常量列表,DML编译器要求访问它的索引必须是编译期可确定的常量值,因此无法用运行时变量作为索引,这就是你遇到"Cannot use variable index in a constant list"错误的原因。
问题解答
支持动态索引的其他数据类型:
可以使用session会话变量、state设备状态变量,或者方法内的local局部变量。这些类型属于运行时可访问的变量,允许使用动态变量作为索引。将idx定义为const是否可行:
不行。即使把方法参数声明为const uint32 idx,它依然是运行时传入的动态值,不符合param列表对编译期常量索引的要求,无法解决问题。临时方案的合理性:
在post_init()中将param列表复制到session变量的方案是标准且最优的选择之一。因为param是只读的编译期常量,仅需在初始化阶段复制一次,后续访问session变量的性能开销可以忽略,完全满足动态索引的需求。
示例代码
// 原param常量列表 param X = [ [0, 0, 0], [0, 0, 1] ]; // 定义会话级变量存储复制后的列表 session uint32 X_session[2][3]; method post_init() { // 初始化时将param列表复制到session变量 for (uint32 i = 0; i < 2; i++) { for (uint32 j = 0; j < 3; j++) { X_session[i][j] = X[i][j]; } } } method get_var(uint32 idx) -> (uint32) { // 访问session变量支持动态索引 return X_session[idx][0]; }
内容的提问来源于stack exchange,提问作者Yun
相关产品推荐
相关产品推荐

