有没有办法直接循环遍历 Kawa 中的 Java Iterable 或者循环遍历 java.util.Iterator
Is there a way to direectly loop over a Java Iterable in Kawa or alternatively loop on the java.util.Iterator
我还没有找到使用 Java interop
在 Kawa (Scheme) 中直接循环 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
或迭代器上循环。
注意:我刚刚意识到我的递归 "let" 是非常错误的(如果迭代器 hasNext
方法 returns 在入口处为 false 它将失败,因为我通过调用初始化块项next 不首先检查 hasNext
并且它不会打印所有项目)但是这部分代码对于回答问题不是必需的并且它可以被修复(我现在 运行 没时间但是我明天会尝试更新代码)。
起点和基本代码是我获得 Iterable 和 Iterator 的前两行。
看起来 "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))
我还没有找到使用 Java interop
在 Kawa (Scheme) 中直接循环 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
或迭代器上循环。
注意:我刚刚意识到我的递归 "let" 是非常错误的(如果迭代器 hasNext
方法 returns 在入口处为 false 它将失败,因为我通过调用初始化块项next 不首先检查 hasNext
并且它不会打印所有项目)但是这部分代码对于回答问题不是必需的并且它可以被修复(我现在 运行 没时间但是我明天会尝试更新代码)。
起点和基本代码是我获得 Iterable 和 Iterator 的前两行。
看起来 "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))