2017-10-13 112 views

回答

1

一個例子使用可能是一個全局計數器:

proc init { } { 
    set ::globalcounter 0 
    trace add variable ::globalcounter read ::gcountUpdate 
} 

proc gcountUpdate { } { 
    incr ::globalcounter 
} 

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

我敢肯定還有其他的用途。正如你指出的那樣,調試。
它可以被用於通過特定程序執行變量訪問。

0

其中一個用於讀取回調(其確實比寫回調不太常見)的用法是將Tcl變量鏈接到C變量;讀回調用於強制讀取C變量並將Tcl變量同步到它。 (寫回調將確保Tcl變量的更新被反映到C變量中。)Tcl的a built-in C API使用了這種機制,儘管它使用基礎C API用於變量跟蹤,而不是構建在Tcl 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 

我不推薦使用局部變量變量的痕跡。與全局/名稱空間變量相比,它們有更多的開銷(以及內部複雜性)。