gpt4 book ai didi

tcl - 跳回到不同的 Tcl 堆栈帧

转载 作者:行者123 更新时间:2023-12-01 09:34:50 25 4
gpt4 key购买 nike

有没有一种简单的方法可以在 Tcl 中展开堆栈?我有一个奇怪的问题,我必须回到一个特定的堆栈帧,字面意思。我可以使用 info 命令获取所有帧信息,但要实际获取特定帧,我必须在每个过程中设置一些局部变量并相应地检查它们。我想知道是否有更简单的方法。

最佳答案

如果您需要获取代码来执行非本地返回(即,跳过几个级别),您可以从 8.5 开始使用 -level 选项到 return。看这个例子:

proc foo-a {} {
puts a-in
foo-b
puts a-out
}
proc foo-b {} {
puts b-in
foo-c
puts b-out
}
proc foo-c {} {
puts c-in
foo-d
puts c-out
}
proc foo-d {} {
puts d-in
bar
puts d-out
}
proc bar {} {
puts bar-in
return -level 3
puts bar-out
}
foo-a

这是通过抛出一种特殊的异常来实现的;细节相当隐蔽。或者,如果你有 8.6 或它们的脚本实现,你也可以使用 trythrow(参见 Tcler's Wiki 讨论期间使用的 Tcl 代码8.6 中的代码)。

对于较旧的 Tcl 版本,最简单的机制是使用 return -code 42 并将一些代码放在堆栈上以 catch 自定义异常并确定是否它是魔法值(这里是 42;它将是 catch 的结果)并做出适当的响应。这可能非常有效,但也很困惑。这就是为什么 8.5 及更高版本为您提供更易于使用的工具的原因。

关于tcl - 跳回到不同的 Tcl 堆栈帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com