如何从TCL中的过程返回一个数组?

时间:2016-03-30 10:36:52

标签: arrays tcl

我从Java调用TCL代码,并希望得到一个数组。我已经读到,在TCL中,这是不可能的,你必须使用其他方法。我觉得我已经尝试过与upvar和dict的所有可能的组合以及什么不是,但是我无法让它工作。如何从程序中获取我的数组?

 proc getOld {} {
   set tempList {}
   set myArray [setK $tempList]
   puts [array size $myArray]
}

getOld

感谢您的帮助和提示!

1 个答案:

答案 0 :(得分:0)

Tcl的数组是变量的集合(例如,可以跟踪单个元素),因此不是第一类值,并且不能直接传递。相反,它们要么通过名称传递,要么传递数组的序列化版本。

使用按名称传递,调用者给出变量的名称,被调用的过程使用upvar将该名称绑定到可以更新的局部变量;在程序之外可以看到更新。

但是,当您使用Java进行集成时,最好使用序列化值方法。该过程仅使用array get将数组转换为可以返回的字典值。字典非常类似于Java的HashMap类。

proc foo {} {
    # Do stuff here to make the array...

    return [array get theArray]
}

您还可以使用dict命令直接创建和使用词典。在Java方面,应该通过TclDict类访问字典。 (我假设你正在使用JTcl;如果没有,你会让自己的生活有点尴尬......)