调用lastError()后如何继续DXL脚本执行并统计数组已赋值元素数?
解决DXL数组已赋值元素统计及错误恢复问题
最简单的方案:用内置函数一步搞定
DXL其实已经内置了专门统计数组已赋值元素数量的函数elemCount(),完全不用自己写循环处理错误,代码简洁又可靠:
string labels[6] labels[0] = "label0" labels[1] = "label1" labels[2] = "label2" labels[3] = "label3" print elemCount(labels) // 直接输出4,就是你要的已赋值元素数量
手动循环的错误处理修正
如果你想自己实现循环统计逻辑,那得先修正原代码里的几个关键问题:
- 错误判断逻辑错了:
lastError()返回的是整数类型的错误码,不能用null来判断是否出错,应该用errorOccurred()函数来检测错误是否发生。 - 需要重置错误状态:捕获到错误后,必须调用
resetError()清除错误标记,否则后续代码会被之前的错误状态影响,导致执行中断。 - 别随便break终止循环:原代码里遇到错误就直接跳出循环,会漏掉后续元素的检查,其实只需要跳过当前未赋值的元素继续循环就好。
修正后的代码如下:
int returnArrayLength(string array[]){ int lengthOfArray = 0, i = 0; int arraySize = sizeof array; for (i=0; i < arraySize ; i++){ noError() // 开启错误捕获 string currentElem = array[i]; // 尝试访问当前元素 if (errorOccurred()) { print "跳过未赋值元素,索引:" i "\n"; resetError(); // 重置错误状态,保证后续代码正常执行 continue; // 跳过当前元素,继续下一个循环 } if (!null currentElem){ lengthOfArray++; print "当前统计数:" lengthOfArray "\n"; } } return lengthOfArray; } string labels[6] labels[0] = "label0" labels[1] = "label1" labels[2] = "label2" labels[3] = "label3" print "最终统计结果:" returnArrayLength(labels) "\n"; // 输出最终结果4
原代码失效的原因
- 你用
!null lastError()判断错误是完全无效的,因为lastError()返回的是整数,永远不会等于null,所以错误捕获的代码块根本不会执行。 - 就算错误被正确捕获,你用
break直接终止了循环,不仅漏掉了后续元素的检查,还可能因为未重置的错误状态,导致脚本后续的print语句也无法正常执行。
内容的提问来源于stack exchange,提问作者Raul Stepan
相关产品推荐
相关产品推荐

