在TCL中打印关联数组,就像在Perl中打印转储程序一样

在TCL中打印关联数组,就像在Perl中打印转储程序一样,tcl,Tcl,---------------Perl代码--------------- 输出如下: $VAR1 = { 'def' => 6 'abc' => 123 }; ---------------TCL代码--------------- 我想像perl打印一样打印这个关联数组。除了parray散列,还有其他方法可以在TCL中打印此内容吗 如果要生成可执行脚本以创建数组,请执行以下操作: proc du

---------------Perl代码---------------

输出如下:

    $VAR1 = {
              'def' => 6
              'abc' => 123
            };
---------------TCL代码---------------


我想像perl打印一样打印这个关联数组。除了parray散列,还有其他方法可以在TCL中打印此内容吗

如果要生成可执行脚本以创建数组,请执行以下操作:

proc dumpArray {arrayName} {
    upvar $arrayName ary
    return [list array set $arrayName [array get ary]]
}
如果希望输出是多行的,并且具有一定的可读性,则需要做更多的工作:

proc dumpArray {arrayName} {
    upvar $arrayName ary
    set result [list array set $arrayName]
    append result "{\n"
    foreach key [lsort -dictionary [array names ary]] {
        append result "    " [list $key $ary($key)] "\n"
    }
    append result "}"
    return $result
}
从第一个版本的简单性可以看出,我们通常不需要编写特定的代码来转储数组;首先,它实际上是一个单班轮

有了其中一个,您就可以:

array set hash {"abc" 123 "def" 6}
puts [dumpArray hash]

帕雷不是一个命令,而是一个过程。做身体招架。你手里有密码。根据你的想法定制它。@Dinesh你说parray不是命令是什么意思?proc是用来发出命令的,所以如果parray是通过proc创建的,那它不是命令吗?@Jerry:同意你的看法。我想说的是,parray不像lindex那样是一个内置命令,而是一个过程。
proc dumpArray {arrayName} {
    upvar $arrayName ary
    set result [list array set $arrayName]
    append result "{\n"
    foreach key [lsort -dictionary [array names ary]] {
        append result "    " [list $key $ary($key)] "\n"
    }
    append result "}"
    return $result
}
array set hash {"abc" 123 "def" 6}
puts [dumpArray hash]