TCL 将变量传递给 proc
TCL pass variable to proc
将参数传递给 proc,预期结果是 puts $cust_id
in proc
将打印 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
里面body)。当你打电话时:
puts $cust_id
你告诉 Tcl 读取 cust_id
变量并将其用作 puts
的参数字。但如果你这样做:
hello {$cust_id}
然后你禁用替换(这就是在 Tcl 中将某些东西放在大括号中的字面意思,总是)所以你得到 $cust_id
传递给 hello
(并打印出来)。
您可以将变量传递给过程。您可以通过为他们提供变量名称,然后使用 upvar
将其绑定到本地名称来实现。像这样:
proc hello {varName} {
upvar $varName someLocalName
puts $someLocalName
}
set cust_id 123
hello cust_id
请注意,这正是上面 set
命令使用的模式。它并不特别(除了它是由 Tcl 运行时为您提供的;它是标准库,而不是语言 本身 )。
是的,upvar
名称很特殊(它将变量名转换为变量),它与 uplevel
一起是其他语言没有的 Tcl 关键特性之一没有。
将参数传递给 proc,预期结果是 puts $cust_id
in proc
将打印 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
里面body)。当你打电话时:
puts $cust_id
你告诉 Tcl 读取 cust_id
变量并将其用作 puts
的参数字。但如果你这样做:
hello {$cust_id}
然后你禁用替换(这就是在 Tcl 中将某些东西放在大括号中的字面意思,总是)所以你得到 $cust_id
传递给 hello
(并打印出来)。
您可以将变量传递给过程。您可以通过为他们提供变量名称,然后使用 upvar
将其绑定到本地名称来实现。像这样:
proc hello {varName} {
upvar $varName someLocalName
puts $someLocalName
}
set cust_id 123
hello cust_id
请注意,这正是上面 set
命令使用的模式。它并不特别(除了它是由 Tcl 运行时为您提供的;它是标准库,而不是语言 本身 )。
是的,upvar
名称很特殊(它将变量名转换为变量),它与 uplevel
一起是其他语言没有的 Tcl 关键特性之一没有。