我在玩斯卡拉懶惰的視圖。看來,如果我們在轉換過程中遇到異常情況,處理起來並不容易。 我試圖嘗試包,但沒有運氣:在懶惰視圖轉換中處理異常
var v = (1 to 10).view.map {
case 5 => throw new Exception("foo")
case v => v
}
val w = v.map { w => Try(w) }
w.foreach { x =>
if (x.isFailure)
println("got it")
else
println(x.get)
}
結果:
v: scala.collection.SeqView[Int,Seq[_]] = SeqViewM(...)
w: scala.collection.SeqView[scala.util.Try[Int],Seq[_]] = SeqViewMM(...)
1
2
3
4
java.lang.Exception: foo
at #worksheet#.$anonfun$1.apply$mcII$sp(tt.sc0.tmp:4)
at #worksheet#.$anonfun$1.apply(tt.sc0.tmp:3)
at #worksheet#.$anonfun$1.apply(tt.sc0.tmp:3)
at scala.collection.TraversableViewLike$Mapped$$anonfun$foreach$2.apply(tt.sc0.tmp:165)
at scala.collection.Iterator$class.foreach(tt.sc0.tmp:889)
at scala.collection.AbstractIterator.foreach(tt.sc0.tmp:1332)
at scala.collection.IterableLike$class.foreach(tt.sc0.tmp:68)
at scala.collection.SeqLike$$anon$2.foreach(tt.sc0.tmp:667)
at scala.collection.TraversableViewLike$Mapped$class.foreach(tt.sc0.tmp:164)
at scala.collection.SeqViewLike$$anon$3.foreach(tt.sc0.tmp:193)
at scala.collection.TraversableViewLike$Mapped$class.foreach(tt.sc0.tmp:164)
at scala.collection.SeqViewLike$$anon$3.foreach(tt.sc0.tmp:193)
at #worksheet#.#worksheet#(tt.sc0.tmp:8)
我缺少什麼?
謝謝!聽起來很明顯... 結束了,我實現了你的最後一個建議(自定義迭代器在下一步()中嘗試)。奇蹟般有效 – mathieu