tcl的新手和試圖理解「trace add variable」命令。在tcl中使用「trace add variable read」
我明白當變量被「寫入」時需要調用回調函數。
但是「讀取」選項有什麼用處?爲了調試?
tcl的新手和試圖理解「trace add variable」命令。在tcl中使用「trace add variable read」
我明白當變量被「寫入」時需要調用回調函數。
但是「讀取」選項有什麼用處?爲了調試?
一個例子使用可能是一個全局計數器:
proc init { } {
set ::globalcounter 0
trace add variable ::globalcounter read ::gcountUpdate
}
proc gcountUpdate { } {
incr ::globalcounter
}
proc main { } {
init
puts $::globalcounter
puts $::globalcounter
}
main
我敢肯定還有其他的用途。正如你指出的那樣,調試。
它可以被用於通過特定程序執行變量訪問。
其中一個用於讀取回調(其確實比寫回調不太常見)的用法是將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
我不推薦使用局部變量變量的痕跡。與全局/名稱空間變量相比,它們有更多的開銷(以及內部複雜性)。