首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用upvar的tcl proc导致历史(Nextid)

使用upvar的tcl proc导致历史(Nextid)
EN

Stack Overflow用户
提问于 2013-11-28 07:05:53
回答 1查看 86关注 0票数 1

我要解决这个奇怪的问题了。我用的是tcl 8.3

在tcl shell中定义此proc之后

代码语言:javascript
复制
% 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
}

我一直在

代码语言:javascript
复制
%
history(nextid)
history(nextid)
history(oldest)
history(oldest)
%

每次我点击换行符“进入”之后,有谁知道为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 07:29:39

因为历史管理是用Tcl本身编写的,并且使用incr

您的incr几乎等于Tcl 8.3的incr,但有一些不同之处:

  • 变量的名称总是打印出来的。
  • 如果变量不存在,则将创建该变量。

因此,如果您删除第一个差异( puts),一切都将按预期工作,只是一些库命令可能会调用您的incr而不是标准的incr

第二个不同之处现在在核心,IIRC从TCL8.5开始--这并不意味着一个变量已经存在,可以调用incr

简单地说,:你所做的一切都很好。但不要指望唯一一个调用标准命令的人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20259740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档