OCaml流:异常处理还是选项类型



要在OCaml中处理异常情况,通常可以选择捕获异常或使用类型'a option。如果我理解正确,由于函数Stream.next(引发异常(和Stream.peek/Stream.junk(返回'a option(,Streams可以同时进行这两种选择。

之间有什么区别吗

match Stream.peek t with
| None -> ***
| Some c -> Stream.junk t; *****

try
let c = Stream.next t in *****
with Stream.Failure -> ***

其中t'a stream类型的变量,并且********是一些表达式序列?

编辑2020-12-03

由于OCaml 4.02,也可以将上述内容写入

match Stream.next t with
| c -> *****
| exception Stream.Failure -> ***

如果要在c(例如(上进行进一步的模式匹配

match Stream.next t with
| [] -> *****
| a::b -> *******
| exception Stream.Failure -> ***

(来源:Xavier Leroy的幻灯片OCaml 4.02的新增功能(。

正如您所注意到的,行为上没有区别。

带有选项类型的版本将包含更多的数据,因为它必须为每个返回的值创建Some x。一般来说,这将是一个小影响,因为OCaml在垃圾收集短命值方面非常出色。

我个人喜欢使用选项,因为这两种情况类似。但是,使用peekjunk似乎比使用一个返回选项的函数要麻烦得多。因此,对于这种情况,我可能会使用基于异常的处理。

换句话说,(在我看来(这是一个判断。

相关内容

  • 没有找到相关文章

最新更新