使用占位符时未在地图中捕获异常

时间:2016-02-09 19:22:21

标签: scala

我刚刚在scala中遇到了一个非常令人困惑的异常现象。假设我定义了以下三行代码:

nil

当我只运行这个"首先捕获"打印出来。似乎当我在map函数中使用占位符时,永远不会调用catch主体。

有人可以说为什么会这样吗?它可能是编译器错误吗?我用scala 2.11.6进行了测试

1 个答案:

答案 0 :(得分:2)

第二个版本扩展为:

Some(0).map { try { x => f(x) } catch { case ex: Exception => println("Caught second"); "" } }

也就是说,f(_)扩展到x => f(x) try块内的try/catch ,因此它仍然是一个未应用的函数。未应用的函数不会抛出异常,因此Option#map块会返回它,并由sudo service myservice stop 使用它抛出异常。