2014-04-16 36 views
0

我想傳遞一個proc變量名稱,並在proc中使用它 。防止在程序中引用?

的問題是,經過論證到PROC變量轉換爲它的價值:

set my_value [ list eee ttt yyy ] 
proc my_proc { args } { 
    puts "MY ARGS IS :$args\n" 
} 

my_proc $my_value 
MY ARGS IS :{eee ttt yyy} 

我想獲得:

MY ARGS IS : my_value 

感謝 烏里

+0

也許我應該重新思考這個方法。 我傳遞給proc要麼變量或cmd。我想 打印其內容時,用於可變帶放爲一個cmd與EVAL 設置VAR_GLOBAL [列表AA BB CC DD] 組cmd_global 「llength {1 2 3 4 5}」 MY_PROC $ VAR_GLOBAL MY_PROC $ cmd_global 的PROC要區分對待的2種類型的參數的個數: PROC MY_PROC {ARGS} { 如果{its_a_variablel} { 提出 「變種是:$抹布」 }其他{ \t的foreach ITR [EVAL $ cmd_global] {放「CMD結果:$ itr」} } } 想要的o utput: my_proc $ var_global > VAR IS:AA BB CC DD my_proc $ cmd_global > CMD結果:5 – user3540913

回答

3

你想得太多硬。如果你想my_value要傳遞的,這也正是你要做的:

my_proc my_value 

Tcl是在這方面非常簡單:如果你想要的名稱,使用的名稱,如果你想要的值,把$在名字前面。

5

Tcl是嚴格通按值語義(它的實現是通過逐不變引用),但是你通過可以是一個名字值(只是不要把$在前面的,因爲對Tcl來說總是的意思是「現在從這個變量讀取」)。特別是,你會做這樣的:

my_proc my_value 

如果你想這個名字綁定到一個局部變量,因此您可以讀取和寫入它,你會那麼做這樣的事情(在過程中):

proc my_proc { args } { 
    upvar 1 [lindex $args 0] theVar 
    puts "MY ARGS IS :$args" 
    puts "THE VARIABLE CONTAINS <$theVar>" 
} 
+0

感謝您的回答。 – user3540913