现在,我花了一段时间才弄清楚为什么我的递归以某种方式设法破坏了堆栈。这是导致此问题的部分:
scala> for {
| i <- List(1, 2, 3)
| j = { println("why am I evaluated?"); 10 } if false
| } yield (i, j)
why am I evaluated?
why am I evaluated?
why am I evaluated?
res0: List[(Int, Int)] = List()
这不是,像,疯了吗?为什么要评估j = ...
它是否以结尾if false
并且永远不会被使用?
我了解到,当{ println ... }
你有一个递归调用(以及递归保护而不是)时会发生什么。if false
:<
为什么?!