条件为真时停止代码

时间:2014-05-29 03:31:02

标签: return tcl exit

我正在尝试构建一个安全性来检查一个条件是真还是假。这将通过一长串代码多次调用。如果条件为真,则会导致其余代码停止。我似乎无法弄明白。有人能指出我正确的方向吗?顺便说一下,Exit不会工作,因为它会关闭我使用的整个程序。

proc _CheckEsc {} {
    if {condition is true} {
        return
    }
    return
}


proc testType {} {
    set TestResult 0
    while {$TestResult < 10} {
        _CheckEsc;
        incr TestResult
    }
    return; 
}

2 个答案:

答案 0 :(得分:2)

您可以使用_CheckEsc的一些更高级的功能让return停止它的来电者。特别是,我们可以使用它来使_CheckEsc本身像breakreturn一样行动。

这种机制非常类似于在其他语言中抛出异常(事实上,你可以认为Tcl具有returnbreakcontinue的特殊异常类,除了事情是比封面下的内容复杂得多。

使呼叫者的循环停止

proc _CheckEsc {} {
    if {condition is true} {
        return -code break
    }
}

让来电者返回

proc _CheckEsc {} {
    if {condition is true} {
        return -level 2
        # Or, if you want to return a value from the caller:
        ### return -level 2 "the value to return"
    }
}

请注意,Tcl 8.4及之前不支持-level选项;这限制了你可以用它做什么,但你的用例工作,只要你这样做:

proc _CheckEsc {} {
    if {condition is true} {
        return -code return
        # Or, if you want to return a value from the caller:
        ### return -code return "the value to return"
    }
}

答案 1 :(得分:0)

这样的事情对你有用吗?

proc _CheckEsc {} {
    return {condition is true}; # I don't know what you have here
}

proc testType {} {
    set TestResult 0
    while {_CheckEsc && $TestResult < 10} {
        incr TestResult
    }
}

您可以通过更具体地了解_CheckEsc所做的事情来帮助我们。