Kotlin 在Arrow中,遍历使用序列而不是线程化计算
我使用的是kotlinKotlin 在Arrow中,遍历使用序列而不是线程化计算,kotlin,functional-programming,sequence,traversal,Kotlin,Functional Programming,Sequence,Traversal,我使用的是kotlin1.3.41和arrow0.10.0-SNAPSHOT。我想按顺序读取文件中的所有行: import arrow.core.extensions.sequence.traverse.traverse import arrow.fx.IO import arrow.fx.extensions.io.monad.monad import arrow.fx.extensions.io.monadDefer.monadDefer import arrow.fx.fix import
1.3.41
和arrow0.10.0-SNAPSHOT
。我想按顺序读取文件中的所有行:
import arrow.core.extensions.sequence.traverse.traverse
import arrow.fx.IO
import arrow.fx.extensions.io.monad.monad
import arrow.fx.extensions.io.monadDefer.monadDefer
import arrow.fx.fix
import java.io.File
val path = "/path/to/file"
fun main() {
val b = File(path).inputStream()
.bufferedReader()
.lineSequence()
.traverse(IO.monad()) {
IO.monadDefer().later { it }
}
.fix()
b.unsafeRunAsync {
println(it)
}
}
不幸的是,我遇到了以下异常:
java.lang.IllegalStateException:此序列只能使用一次。
如果我没有使用遍历
,那么我不会得到异常。
文档中说:序列可以多次迭代,但是一些序列实现可能会限制自己只迭代一次。
这对于缓冲读取器是有意义的。我猜这意味着序列被遍历
至少迭代两次。我试图查看遍历源代码,但未能完全理解它
我不明白为什么遍历序列会消耗它。我不能直接执行计算吗?
是否有任何方法可以在不使用序列的情况下执行类似于的遍历操作