Upvar声明中的下划线

时间:2016-12-10 13:31:30

标签: tcl

在下面的代码部分中将SBPort声明为upvar时,为什么下划线是前缀? 在这个函数里面如果我想打印数组怎么办?因为如果我尝试使用“puts”进行打印,则会将$ _SBPort($ DutPort)视为评论。

proc GetCapturedFrames { DutPorts SBPort} {
  upvar $SBPort _SBPort

  foreach DutPort $DutPorts {
    set card [lindex $_SBPort($DutPort) 1]
    set port [lindex $_SBPort($DutPort) 2]

1 个答案:

答案 0 :(得分:2)

下划线只是变量名中允许的另一个字符。我假设程序员希望局部变量的名称与链接到的变量的名称类似,但实际上名称不同。

您发布的代码中没有任何内容表明puts $_SBPort($DutPort)被视为评论的原因,实际上它应该打印出有问题的值。请注意(假设代码不是非常错误)_SBPort是一个数组(形式为_SBPort(<member name>)的变量名的集合),而$_SBPort($DutPort)似乎是一个列表(序列)价值观。)