将参数传递给进程,预期结果是proc
中的puts $cust_id
将打印123
而不是$cust_id
proc hello {cust_id} {
puts $cust_id
}
set cust_id 123
puts $cust_id
hello {$cust_id}
输出123
$cust_id
当你调用hello
时,你给它一个值,它打印这个值(因为你把它传递给了puts
)。当你打电话时:
puts $cust_id
你告诉Tcl读取cust_id
变量并将其作为puts
的参数字。但是如果你这样做了:
hello {$cust_id}
则禁用替换(这是Tcl中将内容放在大括号中的字面意思,而总是was),因此您将$cust_id
传递给hello
(并打印)。
您可以将变量传递给过程。您可以为它们提供变量的名称,然后使用upvar
将其绑定到本地名称。这样的:
proc hello {varName} {
upvar $varName someLocalName
puts $someLocalName
}
set cust_id 123
hello cust_id
注意,这正是上面的set
命令所使用的模式。它没什么特别的(除了它是由Tcl运行时提供的;它是标准库,而不是语言本身)。
是的,upvar
的名称是特殊的(它将变量名称转换为变量),它与uplevel
一起,是Tcl的关键特性之一,其他语言没有。