我从Java调用TCL代码,并希望得到一个数组。我已经读到,在TCL中,这是不可能的,你必须使用其他方法。我觉得我已经尝试过与upvar和dict的所有可能的组合以及什么不是,但是我无法让它工作。如何从程序中获取我的数组?
proc getOld {} {
set tempList {}
set myArray [setK $tempList]
puts [array size $myArray]
}
getOld
感谢您的帮助和提示!
答案 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;如果没有,你会让自己的生活有点尴尬......)