我正在用Java执行TCL代码。返回对象是一个tcl词典。我如何用Java来解决这个问题?
有一种名为TclDict.foreach()
的方法,但我不明白如何使用它。我在哪里可以获得累加器和访客?
我正在使用tcl.lang包。
答案 0 :(得分:1)
访问者是您提供的对象,它为字典中的每个键/值对实现visit
方法。累加器是您拨打电话时提供的任意对象;访问者将该对象作为参数并返回它(或其他一些对象),然后将其传递给访问者的下一次调用,或者作为迭代结果返回。这是一种方便地对字典内容进行折叠的方法;如果您想忽略它,可以随时使用null
,或者让访问者始终返回它所提供的累加器。
您可以使用foreach
从java.util.HashMap
创建TclDict
:
Map<String,TclObject> makeMap(Interp interp, TclDict dict) {
final Map<String,TclObject> map = new HashMap<>();
TclDict.foreach(interp, null, dict, new TclDict.Visitor() {
Object visitor(Interp interp, Object accum, TclObject key, TclObject value) {
map.put(key.toString(), value);
return accum;
}
});
return map;
}
但是,请注意TclObject
的语义不完全是普通Java对象的语义;建议您不要修改这些值或长期保留它们。