我还没有找到在Kawa (方案)中使用Java直接循环Java java.lang.Iterable或java.util.Iterator的方法
我可以获得我的Java java.lang.Iterable,然后在我的java.util.Iterator和循环中使用一个名为let的递归
((define blkaccessor::java.lang.Iterable (bfaccessor:getHeaderAccessor))
(define blkaccitr::java.util.Iterator (blkaccessor:iterator))
(let loop ((block-item::JDataBlockItemData (blkaccitr:next)))
(when (blkaccitr:hasNext)
(display &{&[block-item:name] = &[block-item:value] })
(loop (blkaccitr:next))
)
)代码运行并列出REPL中的所有项,但是必须有一种方法直接在Iterable或Iterator上循环。
注意:我刚刚意识到我的递归"let“是非常错误的(如果迭代器hasNext方法在条目上返回false将失败,因为我首先调用next来初始化块项,但它不会打印所有项),但是这部分代码对于回答问题并不重要,它可以修复(我现在没有时间了,但我明天会尝试更新代码)。
起点和基本代码是我获得Iterable和Iterator的前两行。
发布于 2019-01-09 09:30:34
它看起来像是"map“和"for-each”应该能够在迭代器上迭代:https://gitlab.com/kashell/Kawa/commit/9428041dca2d262edc3a5ab781e1302f33e279a1。
如果没有更多的细节(或更少),您的代码就无法再现,但下面是Java字符串数组上迭代的一个示例:
(let ((java-string-array (String[] "aaa" "bb" "c")))
(for-each (lambda (string) (write string))
java-string-array))https://stackoverflow.com/questions/54099818
复制相似问题