2015-05-22 148 views
0

我想使用proc中指定的變量(proc)在proc中使用。例如,我試了下面的東西使用TCL中proc中的腳本中指定的變量

set a 10 
proc myproc { } { 
puts $a 
} 
myproc 

我期待上面的腳本打印10。但上面的腳本錯誤了「不能讀取」一個「:沒有這樣的變量」

我不能將$ a作爲參數傳遞給腳本,因爲我有很多這樣的變量,我想在我的腳本里面使用我的proc。你能幫我解決這個問題嗎?

您的幫助表示讚賞

回答

2

如果變量是在同一個堆棧水平爲呼叫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

0

如果你有命名空間,你可以總是在那裏給它分配:

namespace eval blah { 
    variable a 10 
} 

proc blah::myproc { } { 
    variable a 
    puts $a 
} 
blah::myproc 

這種方式可以避免與其他全局變量

潛在衝突