我对Kotlin中的h1
感到困惑。我似乎在阅读手册时全错了:
这是函数签名(用于带有种子的generateSequence
):
generateSequence
因此fun <T : Any> generateSequence(
seed: T?,
nextFunction: (T) -> T?
): Sequence<T>
的种子类型应相同,下一个值也应用于下一个迭代生成。...
但是这个男人的例子是:
Sequence
因此,看来fun fibonacci(): Sequence<Int> {
return generateSequence(Pair(0, 1), { Pair(it.second, it.first + it.second) }).map { it.first }
}
println(fibonacci().take(10).toList()) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
的类型是Sequence
,种子的种子是Int
。
生成器函数将Pair<Int, Int>
映射到Pair<Int, Int>
。
Int
的位置是什么(生成器的输出为Pair<Int, Int>
...)?
该函数如何知道何时停止?生成器从不返回Int
答案 0 :(得分:2)
所以看来序列的类型是Int,种子是Pair。
给定的fibonacci()
函数使用generateSequence()
生成Pair
的序列,然后使用map
函数将该序列转换为{{1}的序列}。
Int
如果可以帮助您考虑一下,您可以想象先生成“整个”第一个序列,然后再将任何对转换为整数。
该函数如何知道何时停止?
不是。但是该示例使用the take()
function将序列截断为前10个项目,然后打印该序列而不是打印无限序列。