我刚刚在scala中遇到了一个非常令人困惑的异常现象。假设我定义了以下三行代码:
nil
当我只运行这个"首先捕获"打印出来。似乎当我在map函数中使用占位符时,永远不会调用catch主体。
有人可以说为什么会这样吗?它可能是编译器错误吗?我用scala 2.11.6进行了测试
答案 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
使用它抛出异常。