递归列表中的Kotlin无限循环
这遵循无限循环,在clojure这样的事情就好了
tailrec fun passHeaders (xH: List<Int>) { while (xH.isNotEmpty()) { passHeaders(xH.drop(1)) } }
List.drop
不改变List
,而是产生一个新的List
实例。 因此,你是while
循环是无限的。
你不提供基本的情况下,这就是为什么。 因为在每次调用passHeaders
, xH
都是自己的副本,所以永远不会是空的。 记住,当你调用drop()
,会创建一个新的列表。
while (xH.isNotEmpty())
这说的是“虽然我的副本不是空的,调用passHeaders
。
另一方面:
if (xH.isNotEmpty())
可能会做你想要的。
如果xH
不为空,对这个函数的第一个调用将永远不会终止。 .drop()
不会修改原始列表。