Java:迭代tcl dict

时间:2015-11-27 09:48:59

标签: java tcl

我正在用Java执行TCL代码。返回对象是一个tcl词典。我如何用Java来解决这个问题?

有一种名为TclDict.foreach()的方法,但我不明白如何使用它。我在哪里可以获得累加器和访客?

我正在使用tcl.lang包。

1 个答案:

答案 0 :(得分:1)

访问者是您提供的对象,它为字典中的每个键/值对实现visit方法。累加器是您拨打电话时提供的任意对象;访问者将该对象作为参数并返回它(或其他一些对象),然后将其传递给访问者的下一次调用,或者作为迭代结果返回。这是一种方便地对字典内容进行折叠的方法;如果您想忽略它,可以随时使用null,或者让访问者始终返回它所提供的累加器。

您可以使用foreachjava.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对象的语义;建议您不要修改这些值或长期保留它们。