tcl proc使用upvar生成历史记录(nextid)
我有个奇怪的问题。 我正在使用TCL8.3 在我在tcl shell中定义这个过程之后tcl proc使用upvar生成历史记录(nextid),tcl,procedure,upvar,Tcl,Procedure,Upvar,我有个奇怪的问题。 我正在使用TCL8.3 在我在tcl shell中定义这个过程之后 % proc incr { varName {amount 1}} { puts $varName upvar #0 $varName var puts $varName if {[info exists var]} { set var [expr $var + $amount] } else { set var $amount }
% proc incr { varName {amount 1}} {
puts $varName
upvar #0 $varName var
puts $varName
if {[info exists var]} {
set var [expr $var + $amount]
} else {
set var $amount
}
return $var
}
我一直在
%
history(nextid)
history(nextid)
history(oldest)
history(oldest)
%
每次我点击新行“回车”之后
有人知道为什么会发生这种情况吗?因为历史管理是用Tcl本身编写的,并且使用了
incr
您的incr
几乎等同于Tcl 8.3的incr
,但存在一些差异:
- 始终打印变量的名称
- 如果变量不存在,将创建该变量
put
),一切都将按预期工作,只是一些库命令可能会调用您的incr
,而不是标准的incr
第二个区别是现在的核心,IIRC从Tcl 8.5开始。变量已经存在或调用incr
简言之:你做的很好。但是不要期望成为唯一一个调用标准命令的人。您可能只想
upvar$varName var
——使用#0
意味着您只能对全局变量使用proc,而不会看到局部变量。