tcl的新手并尝试理解"跟踪添加变量"命令。
我理解当变量被写入"时需要调用回调函数。到。
但"读&#34>的用途是什么?选项?用于调试?
答案 0 :(得分:1)
一个示例用途可能是全局计数器:
proc init { } {
set ::globalcounter 0
trace add variable ::globalcounter read ::gcountUpdate
}
proc gcountUpdate { } {
incr ::globalcounter
}
proc main { } {
init
puts $::globalcounter
puts $::globalcounter
}
main
我确信还有其他用途。正如你所指出的,调试。
它可以用于通过特定程序强制执行变量访问。
答案 1 :(得分:0)
读取回调的一个用途(确实比写回调更常见)是将Tcl变量链接到C变量; read回调用于强制读取C变量并将Tcl变量同步到它。 (写回调将确保Tcl变量的更新反映到C变量。)Tcl得到a built-in C API使用这种机制,虽然它使用底层C API进行变量跟踪,而不是使用Tcl API建立在它之上。
您还可以使用读回调来制作一个看似只读的变量:
trace add variable foo read {apply {args {
upvar "#0" foo v
set v "definitely this"
}}}
puts $foo
set foo "that"
puts $foo
我不建议在局部变量上使用变量跟踪。它们比全局/命名空间变量具有更多的开销(和内部复杂性)。