我遇到了这个奇怪的问题。 我正在使用tcl 8.3
我在tcl shell中定义了这个proc
% 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)
%
每次我点击换行“Enter”之后 任何人都知道为什么会这样?
答案 0 :(得分:2)
因为历史管理是用Tcl本身编写的,并且使用incr
。
您的incr
几乎等于Tcl 8.3的incr
,但有一些差异:
因此,如果删除第一个差异(puts
),一切都会按预期工作,只是某些库命令可能会调用incr
而不是标准incr
。
第二个区别现在是核心,IIRC从Tcl 8.5开始,并不是一个变量已经存在于调用incr
的nessencary。
简而言之:你做的很好。但不要指望他是唯一一个调用标准命令的人。