小编Sam*_*ley的帖子

upvar、TclOO 和 next -(可能)意外行为的解释

我想知道是否有人可以解释为什么我可以在嵌套的 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

5
推荐指数
1
解决办法
61
查看次数

标签 统计

tcl ×1