防止在proc中引用?

时间:2014-04-16 11:31:29

标签: 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

2 个答案:

答案 0 :(得分:5)

Tcl在语义上是严格的值传递(它的实现是pass-by-em> immutable -reference),但是你传递的值可以是一个名字(只是不要把$放在它前面,因为对于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>"
}

答案 1 :(得分:3)

你在想太难了。如果您希望传递my_value,那就是您所做的:

my_proc my_value

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