TCL:回到更高的水平?

the*_*edp 3 tcl

如何从proc返回到更高的上下文?
例如:如果proc X调用另一个调用第三个proc Z的proc Y - 是否有办法从Z直接返回X?

Don*_*ows 9

从8.5开始,是的.该return命令有一个-level选项,用于执行此操作:

return -level 2 $someValue
Run Code Online (Sandbox Code Playgroud)

因此,例如:

proc X {} {
    puts "X - in"
    Y
    puts "X - out"
}
proc Y {} {
    puts "Y - in"
    Z
    puts "Y - out"
}
proc Z {} {
    puts "Z - in"
    return -level 2 "some value"
    puts "Z - out"
}
X
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

X - in
Y - in
Z - in
X - out
Run Code Online (Sandbox Code Playgroud)

请注意,这样做会降低可重用性Z,但这是您的业务.