首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在tcl中使用“跟踪添加变量读取”

在tcl中使用“跟踪添加变量读取”
EN

Stack Overflow用户
提问于 2017-10-13 21:13:10
回答 2查看 321关注 0票数 1

新的tcl,并试图理解“跟踪添加变量”命令。

我理解当一个变量被“写”到时调用回调函数的必要性。

但是,“读”选项有什么用呢?为了调试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 22:04:18

例如,可以使用全局计数器:

代码语言:javascript
运行
复制
proc init { } {
  set ::globalcounter 0
  trace add variable ::globalcounter read ::gcountUpdate
}

proc gcountUpdate { } {
  incr ::globalcounter
}

proc main { } {
  init
  puts $::globalcounter
  puts $::globalcounter
}
main

我肯定还有其他用途。正如你所指出的调试。

它可用于通过特定程序强制执行可变存取。

票数 1
EN

Stack Overflow用户

发布于 2017-10-14 08:43:22

read回调(实际上比写回调更不常见)的一个用途是将Tcl变量链接到C变量;read回调用于强制读取C变量并将Tcl变量同步到C变量。(写回调将确保Tcl变量的更新反映到C变量中。)Tcl拥有使用这种机制的内置的C API,尽管它使用底层的C作为变量跟踪,而不是构建在其之上的Tcl。

您还可以使用read回调来创建一个明显的只读变量:

代码语言:javascript
运行
复制
trace add variable foo read {apply {args {
    upvar "#0" foo v
    set v "definitely this"
}}}

puts $foo
set foo "that"
puts $foo

我不建议在局部变量上使用变量跟踪。与全局/命名空间变量相比,它们具有更多的开销(和内部复杂性)。

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

https://stackoverflow.com/questions/46738112

复制
相关文章

相似问题

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