在 TCL 中打印关联数组,就像在 Perl 中打印 Dumper

print associative array in TCL like Dumper prints in Perl

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

        use Data::Dumper;
        my %hash = ('abc' => 123, 'def' => 6);
        print Dumper(\%hash);

给出类似的输出,

    $VAR1 = {
              'def' => 6
              'abc' => 123
            };

----------------------------TCL代码-------- --------------------

    set hash(abc) 123
    set hash(def) 6

我想像 perl 打印一样打印这个关联数组。除了 parray hash 之外,还有什么方法可以在 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]