さて、再帰がどういうわけかスタックを吹き飛ばしてしまう理由を理解するのにしばらく時間がかかりました。これが、この問題の原因となっている部分です。
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
、私は学びました。:<
どうして?!