为什么这个方法调用工作,而不是代码衬里?

时间:2015-01-26 20:15:24

标签: if-statement methods groovy while-loop

所以在这个方法中,while循环的条件是我选择在行代码中删除的东西,并创建一个在需要时调用的方法。但是,第一种方法不起作用,并导致应用程序以静默方式锁定。

def getLineRows( rows, index ) {
    def lineRows = [rows[index]]
    def newOperator
    def i = index + 1
    if ( index <= ( rows.size() - 1 ) ) {
        newOperator = false

这是有问题的代码。

        while ( index <= ( rows.size() - 1 ) && !newOperator ) {
            if ( rows[index].PGM_PROC_OPE.trim() == "" ||
                ( rows[index].PGM_PROC_TY == "OR" ||
                  rows[index].PGM_PROC_TY == "AN" ) ) {
                lineRows << rows[i]
            } else {
                newOperator = true
            }
            i++
        }
    }
    return lineRows
}

在第二个和视觉上相同的方法中,我简单地创建了一个名为moreRows(rows,index)的方法。还有另外两种方法调用,但是它们已经通过测试被排除在考虑之外。

def moreRows( rows, index ) {
    return index <= ( rows.size() - 1 )
}

当使用moreRows时,使用moreRows会导致下面的代码正常运行,而不是上面的方法,其中moreRows符合要求?

def getLineRows( rows, index ) {
    def lineRows = [rows[index]]
    def newOperator
    def i = index + 1
    if ( moreRows( rows, i ) ) {
        newOperator = false
        while ( moreRows( rows, i ) && !newOperator ) {
            if ( operatorEmpty( rows, i ) || isSpecialProcType( rows, i ) ) {
                lineRows << rows[i]
            } else {
                newOperator = true
            }
            i++
        }
    }
    return lineRows
}

1 个答案:

答案 0 :(得分:2)

您定义i并在循环中递增它,但不要在while语句中使用它

while ( index <= ( rows.size() - 1 ) && !newOperator ) {

所以你在这里进入无限循环。