【问题标题】:How to handle errors without execution halting如何在不停止执行的情况下处理错误
【发布时间】:2019-01-09 10:13:44
【问题描述】:

我有一个小的 dxl 脚本,我需要从一个数组中返回分配的位置数,比如说,大小为 20,其中只分配了 10 个位置。

我尝试使用 noError() 和 lastError() 函数,但是在调用 lastError() 之后,脚本停止并且我无法继续执行。 这是我的代码:

int returnArrayLength(string array[]){
    int lengthOfArray = 0,i = 0;
    for (i=0; i < sizeof array ; i++){
            noError()
            if (!null array[i]){
                lengthOfArray++
                print lengthOfArray         
            }
            if (!null lastError()){
                print "Exception caught!" // not printed
                break
            }   
    }
    return lengthOfArray
}

string labels[6]
labels[0] = "label0"
labels[1] = "label1"
labels[2] = "label2"
labels[3] = "label3"

print returnArrayLength(labels)  // not printed

上面的代码打印出以下内容: 1 2 3 4

调用 lastError() 函数后如何恢复执行?

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    这比我想象的要艰难!

    因此,事实证明,未分配元素错误会完全停止 DXL 程序。那么我们需要做什么呢?

    好吧,我们需要在它自己的环境中运行一段 sn-p 代码,并让它在需要时崩溃!

    为此,我们需要创建一个 eval_,将我们的数组传递给它,然后让它返回_(如果 eval_ 失败,则不会执行)

    看看:

    int returnArrayLength(string array[]){
        int lengthOfArray = 0,i = 0;
        for (i=0; i < sizeof array ; i++){
            string scode = "noError()
                string ( &passedAr)[] = (addr_ "( ( addr_ array ) int ) ")
                string s = passedAr["i"]
                lastError()
                return_ \"Y\""
                if ( ( eval_ scode ) == "Y" ){
                    lengthOfArray++
                    print lengthOfArray         
                } else {
                    print "Exception caught!" "\n"
                    break
                }   
        }
        return lengthOfArray
    }
    
    string labels[6]
    labels[0] = "label0"
    labels[1] = "label1"
    labels[2] = "label2"
    labels[3] = "label3"
    
    print returnArrayLength(labels)
    

    多么奇妙的小问题。

    我用来帮助解决这个问题的资源:

    How to pass an array into an eval_

    eval_ , addr_ , and memory leaks

    Testing for unassigned variables - 由于数组的性质,这个不太有效,至少据我所知!

    无论如何,感谢您的挑战!

    【讨论】:

    • 这是一个很好的解决方案!如果可能的话,我宁愿根本不使用数组的另一个原因。跳过列表 ftw!
    • 感谢您的“神奇”解决方案 Russell!我还找到了一种解决方法,它会使用比所需更多的内存,但显然你的解决方案更好,所以我会坚持下去! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多