Tcl 阻止进程中的引用?

Tcl 阻止进程中的引用?,tcl,Tcl,我想向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 谢谢 Uri你想得太多了。如果您希望传入我的_值,这正是您要做的: m

我想向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
谢谢
Uri

你想得太多了。如果您希望传入我的_值,这正是您要做的:

my_proc my_value
Tcl在这方面非常简单:如果您想要名称,请使用名称,如果您想要值,请在名称前面放一个$。

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>"
}

也许我应该重新考虑一下这个方法。我将变量或cmd传递给proc。我想打印它们的内容,对于带有put的变量,对于带有eval set var_global[list AA BB CC DD]set cmd_global llelength{1 2 3 4 5}my_proc$var_global my_proc$cmd_global proc必须区别对待两种类型的参数:proc my_proc{args}{if{its_a_variablel}{puts VAR为:$rags}else{foreach itr[eval$cmd_global]{puts cmd RESULTS:$itr}}}所需输出:my_proc$VAR_global>VAR为:AA BB CC DD my_proc$cmd_global>cmd RESULTS:5