我想使用proc中指定的變量(proc)在proc中使用。例如,我試了下面的東西使用TCL中proc中的腳本中指定的變量
set a 10
proc myproc { } {
puts $a
}
myproc
我期待上面的腳本打印10。但上面的腳本錯誤了「不能讀取」一個「:沒有這樣的變量」
我不能將$ a作爲參數傳遞給腳本,因爲我有很多這樣的變量,我想在我的腳本里面使用我的proc。你能幫我解決這個問題嗎?
您的幫助表示讚賞
我想使用proc中指定的變量(proc)在proc中使用。例如,我試了下面的東西使用TCL中proc中的腳本中指定的變量
set a 10
proc myproc { } {
puts $a
}
myproc
我期待上面的腳本打印10。但上面的腳本錯誤了「不能讀取」一個「:沒有這樣的變量」
我不能將$ a作爲參數傳遞給腳本,因爲我有很多這樣的變量,我想在我的腳本里面使用我的proc。你能幫我解決這個問題嗎?
您的幫助表示讚賞
如果變量是在同一個堆棧水平爲呼叫myproc
聲明,然後你可以做以下在PROC:
upvar a a
這樣的:
set a 10
proc myproc { } {
upvar a a
puts $a
}
myproc
然後您可以在本地程序中使用$a
。命令upvar
將在棧中某處聲明的變量與局部變量「鏈接」。如果變量聲明超過1級堆棧中的更深,THN你需要通過「2」 upvar
,因此它知道在哪裏尋找變量:
upvar 2 a a
如果不通過「 2「(或其他值),則upvar
假設默認查找深度爲1.
您可以在Tcl文檔中閱讀關於該命令的更多詳細信息,內容涉及upvar
。
如果變量a
始終是一個全局變量(在腳本頂級聲明),那麼你可以使用:
global a
在你的程序中,而不是upvar
。
如果你有命名空間,你可以總是在那裏給它分配:
namespace eval blah {
variable a 10
}
proc blah::myproc { } {
variable a
puts $a
}
blah::myproc
這種方式可以避免與其他全局變量
潛在衝突