try...catch...throw
这是目前最常见的异常处理机制了吧。
形式类似于
try { //... if ( error ) throw xxx; return; } catch condition { } catch condition { }
应该是目前最流行和最常见的异常处理机制,函数式有自己的特点,所以形式上有所变化,但本质其实是一样的。
其实那个catch序列就是模式匹配,,,,,
函数式语言一般有模式匹配的语法,所以写出来就不一定长这样,,,
至于提问者所说的:
然而很多异常,错误都是“似曾相识”或是“司空见惯”的,甚至有些异常或结果是否完全可以作为一种『输出结果』作为处理方式,甚至是否能够在语言 编译阶段能够枚举出所有的可能的错误和异常情况并在编译时强制完善?(对程序产生“错误/异常”有无成熟的理论分析,得出一些有意义的结论?)
1、异常结果本来就是一种输出结果,只是语法上进行了特殊处理而已,对于支持模式匹配语法的函数式,很多就直接用模式匹配直接处理异常返回了。
2、编译阶段是可以枚举出所有的异常并在编译时强制完善的,Java就是这样做的,需要显示声明throws。结果是这项特性貌似除了恶心人没有什么特别的优势。
异常处理其实可以认为就是这样做的:
var result = invokeTryBlock(); if ( result is Exception ) { //catch 模式匹配 return result;//若没有处理异常,则抛到上级处理。 } else return result;//返回正确结果。