Java: 遍历 tcl 字典
Java: Iterate over tcl dict
我正在 Java 中执行 TCL 代码。 return 对象是一个 tcl 字典。我如何在 Java 中解决这个问题?
有一种方法叫做 TclDict.foreach()
,但我不知道如何使用它。我从哪里得到累加器和访问者?
我正在使用 tcl.lang 包。
访问者是您提供的对象,它为字典中的每个 key/value 对实现 visit
方法。累加器是您在调用时提供的任意对象;访问者将该对象作为参数并 returns 它(或其他一些对象),然后将其传递给对访问者的下一次调用,或者 returned 作为迭代的结果。这是一种方便地折叠字典内容的方法;如果你只想忽略它,你总是可以使用 null
,或者让访问者总是 return 提供它的累加器。
您可以使用 foreach
从 TclDict
创建一个 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;
}
但是,请注意 TclObject
s 的语义与普通 Java 对象的语义不完全相同;建议您不要修改这些值或长时间保留它们。
我正在 Java 中执行 TCL 代码。 return 对象是一个 tcl 字典。我如何在 Java 中解决这个问题?
有一种方法叫做 TclDict.foreach()
,但我不知道如何使用它。我从哪里得到累加器和访问者?
我正在使用 tcl.lang 包。
访问者是您提供的对象,它为字典中的每个 key/value 对实现 visit
方法。累加器是您在调用时提供的任意对象;访问者将该对象作为参数并 returns 它(或其他一些对象),然后将其传递给对访问者的下一次调用,或者 returned 作为迭代的结果。这是一种方便地折叠字典内容的方法;如果你只想忽略它,你总是可以使用 null
,或者让访问者总是 return 提供它的累加器。
您可以使用 foreach
从 TclDict
创建一个 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;
}
但是,请注意 TclObject
s 的语义与普通 Java 对象的语义不完全相同;建议您不要修改这些值或长时间保留它们。