9
我很好奇爲什麼在下面的foreach
塊中拋出異常。我希望沒有值使它通過過濾器,因此永遠不會到達該塊。與map
發生相同的行爲。在Foreach/Map Block中拋出異常
scala> (1 to 10) filter { _ > 12 } foreach { throw new Exception }
java.lang.Exception
... 33 elided
我期望的異常沒有拋出,並表現得更像下面這樣永遠不會執行println
哪裏。
scala> (1 to 10) filter { _ > 12 } foreach { println _ }
也許這與如何處理異常有關?爲什麼是這樣?
換句話說,表達式'throw new Exception'是函數foreach的一個值類型的參數,所以它在執行較大的表達式之前被評估。 '_ => throw new Exception'也會首先被評估,但它的計算結果是一個函數對象(當執行較大的表達式時,它永遠不會被調用)。 –
@SteveWaldman我認爲這是一個更好的答案。李的一目瞭然似乎指出爲什麼這編譯 –