在下面的代码,一旦我打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
}
在break
和continue
操作只能出去循环的一个水平。 如果您需要更多的考虑重构 ,使你可以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
}
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}
}