我想知道是否有人可以解释为什么我可以在嵌套的 proc 中成功链接 upvars 的幕后细节,但它在嵌套的 TclOO 方法中不起作用(在子类中覆盖的那些方法)。(有人告诉我,在 TclOO 类方法中调用 [next] 有点像“临时尾调用”,因为不会创建新的堆栈级别。是这种情况吗?如果是这样,完整的图片是什么?)
例如,以下三种方法并不都给出相同的结果:
proc addone {varname} {
upvar $varname x;
incr x;
}
proc addanotherone {varname} {
upvar $varname xx;
addone xx;
incr xx;
}
oo::class create C1 {
method addone {varname} {
upvar $varname x;
incr x;
}
}
oo::class create S1 {
superclass C1;
method addone {varname} {
upvar $varname xx;
next xx;
incr xx;
}
}
oo::class create S2 {
superclass C1;
method addone {varname} {
upvar $varname …Run Code Online (Sandbox Code Playgroud) tcl ×1