【发布时间】:2014-02-11 07:39:56
【问题描述】:
现在,我花了 一段时间 才弄清楚为什么我的递归会以某种方式破坏堆栈。这是导致此问题的部分:
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),我了解到。 :
为什么?!
【问题讨论】:
-
出于好奇,您是否来自 Python 并希望这与他们的内联 if 表达式一样?
-
@nafg,一点也不。 =) 我从来没有用 Python 写过一行代码。
标签: scala recursion for-comprehension