Java: 遍历 tcl 字典

Java: Iterate over tcl dict

我正在 Java 中执行 TCL 代码。 return 对象是一个 tcl 字典。我如何在 Java 中解决这个问题?

有一种方法叫做 TclDict.foreach(),但我不知道如何使用它。我从哪里得到累加器和访问者?

我正在使用 tcl.lang 包。

访问者是您提供的对象,它为字典中的每个 key/value 对实现 visit 方法。累加器是您在调用时提供的任意对象;访问者将该对象作为参数并 returns 它(或其他一些对象),然后将其传递给对访问者的下一次调用,或者 returned 作为迭代的结果。这是一种方便地折叠字典内容的方法;如果你只想忽略它,你总是可以使用 null,或者让访问者总是 return 提供它的累加器。

您可以使用 foreachTclDict 创建一个 java.util.HashMap:

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;
}

但是,请注意 TclObjects 的语义与普通 Java 对象的语义不完全相同;建议您不要修改这些值或长时间保留它们。