我要解决这个奇怪的问题了。我用的是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)
%每次我点击换行符“进入”之后,有谁知道为什么会发生这种事?
发布于 2013-11-28 07:29:39
因为历史管理是用Tcl本身编写的,并且使用incr。
您的incr几乎等于Tcl 8.3的incr,但有一些不同之处:
因此,如果您删除第一个差异( puts),一切都将按预期工作,只是一些库命令可能会调用您的incr而不是标准的incr。
第二个不同之处现在在核心,IIRC从TCL8.5开始--这并不意味着一个变量已经存在,可以调用incr。
简单地说,:你所做的一切都很好。但不要指望唯一一个调用标准命令的人。
https://stackoverflow.com/questions/20259740
复制相似问题