如何解决如何从Kotlin序列中的不同类中产生值?
我在Kotlin有一个复杂的树助行器,它会走动一棵大树,我希望它通过yield()输出值,这样,如果我只想提取,就不必走整棵树。一个值。我似乎无法正确理解语法。简而言之,我想要做的是这样的事情:
class TreeWalker {
fun traverse() {
// not allowed
//yield("foo")
}
}
fun main() {
val s = sequence<String> {
val tw = TreeWalker()
tw.traverse()
}
println(s.take(1))
}
我可以从序列块内部而不是从单独的类/方法在线找到所有调用yield()的序列示例。我该怎么做?
解决方法
仅暂停功能可以暂停和恢复。假设您希望此程序在没有协程的情况下工作(从您自己的角度出发,因为sequence
实际上在后台运行了一种懒惰的协程),TreeWalker类将需要能够跟踪其在状态中的状态。树。 traverse()
函数应从中断处恢复并返回单个项目。这是一个简化的示例,仅搜索2D数组而不是遍历一棵树:
class TreeWalker {
private var depth = 0
private var positionAtDepth = 0
fun traverse(): String? {
for (level in depth until maxDepth) {
depth = level
for (position in positionAtDepth until maxPosition) {
positionAtDepth = position
val item = someTree[level][position]
if (isAMatch(item)) {
return item
}
}
}
return null
}
}
fun main() {
val s = sequence<String> {
val tw = TreeWalker()
while (true) {
tw.traverse()?.let { yield(it) } ?: break
}
}
println(s.take(1))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。