在使用F#option
类型一段时间后,我意识到它可以用于处理异常情况。我可以在以下实施例中使用两种或option
Exception
:选项vs异常处理异常
- 的
find
功能从列表/阵列/ SEQ模块在罕见的情况下提高KeyNotFoundException
,而对应tryFind
同行在这些情况下返回None
。 - 当我回溯(在解决N皇后,数独等),只要分支无解,我可以抛出一个异常,后来将其接住或返回无以匹配值原路返回。这些情况经常发生,直到我们找到解决方案。
我的印象是option
是一种更为实用的方法,而Exception
更常用于.NET平台。
option
和Exception
在异常处理方面的可用性,性能等方面有什么区别?在哪些情况下使用一种技术比使用另一种更好?
事实上,我曾测量过这一点,发现C++异常比OCaml慢6倍,而.NET的速度比OCaml慢600倍! –