Tcl Upvar声明中的下划线

Tcl Upvar声明中的下划线,tcl,Tcl,在下面的代码部分中,将SBPort声明为upvar时,为什么要加下划线作为前缀? 在这个函数中,如果我想打印数组,我该怎么做?因为如果我尝试打印“puts”,它会考虑将$SBPort($DutPort)作为注释 proc GetCapturedFrames { DutPorts SBPort} { upvar $SBPort _SBPort foreach DutPort $DutPorts { set card [lindex $_SBPort($DutPort) 1]

在下面的代码部分中,将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]

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


您发布的代码中没有任何内容表明为什么
put$\u SBPort($DutPort)
会被视为注释,实际上它应该打印有问题的值。请注意(假设代码没有大错特错)
\u SBPort
是一个数组(形式为
\u SBPort()
的变量名集合),而
$\u SBPort($DutPort)
似乎是一个列表(一系列值)。

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

您发布的代码中没有任何内容表明为什么
put$\u SBPort($DutPort)
会被视为注释,实际上它应该打印有问题的值。请注意(假设代码没有大错特错)
\u SBPort
是一个数组(形式为
\u SBPort()
的变量名集合),而
$\u SBPort($DutPort)
似乎是一个列表(一系列值)