使用 F# option
类型一段时间后,我意识到它可以用于处理异常情况。在以下示例中,我可以使用 option
或 Exception
:
find
函数在不常见的情况下会引发 KeyNotFoundException
,而对应的 tryFind
在这些情况下会返回 None
。 我的印象是
option
是一种更实用的方法,而 Exception
在.NET平台中更常用。option
和Exception
在可用性、性能等方面的异常处理有什么区别?在哪些情况下使用一种技术比使用另一种更好?
最佳答案
CLR 使得抛出和捕获异常的操作极其昂贵。仅出于这个原因,您应该更喜欢像 Option 这样的构造来报告预期的失败。如果故障确实异常且几乎无法恢复,请继续抛出异常。但正如您所注意到的,在搜索过程中回溯之类的事情并不异常(exception),如果您在异常情况下实现它们,您会发现您的性能会受到很大影响。
因为这是 CLR 的一个属性,所以你是否在 F# 中并不重要。我的理解是类似 ML 语言的其他运行时,例如ocaml 没有这个特性,因此可能会更频繁地使用异常来进行控制流。
关于.net - 异常处理中的选项与异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952625/