TCL:环路如何摆脱内心最环的外?(TCL: loops How to get out of inn

2019-10-17 14:55发布

在下面的代码,一旦我打check_access 0我怎么保值,并触及下方,如果条件($ check_root && $ check_access)。 突破将只有终止内环。 但其他循环将继续按照我。

   } else {
           set check_access 0
           break
         }
      }
   }
   if {$check_root && $check_access} {
    set result 1
  } else {
    set result 0
  }

Answer 1:

breakcontinue操作只能出去循环的一个水平。 如果您需要更多的考虑重构 ,使你可以return 。 或者,尝试用Tcl 8.6自定义异常:

try {
    foreach a $longList1 {
        foreach b $longList2 {
            if {[someCondition $a $b]} {
                # Custom non-error exception
                return -level 0 -code 123
            }
        }
    }
} on 123 {} {
    # Do nothing; we're out of the loop
}


Answer 2:

break跳转到只有最里面的循环的结束,和Tcl没有goto 。 但return ,除非它是一个内catch或类似的,退出的过程,它就像跳到它的结束。 所以,如果你做最外层循环过程的最后一个命令(如果你的代码是顶层,你必须把它放在一个程序首先要能使用收益),则可以使用return为多休息。 就在环出的程序,进入来电者的代码后,移动的命令:

proc callMe {} {
  foreach ... {
    foreach ... {
      if ... {
        return
      }
    }
  }
  # move this code from here...
}

callMe
# ...to here

另一种方法是把额外的测试:

set done 0
foreach ... {
  foreach ... {
    foreach ... {
      if ... {
        set done 1
        break
      }
    }
    if {$done} {break}
  }
  if {$done} {break}
}


文章来源: TCL: loops How to get out of inner most loop to outside?
标签: list loops tcl