OCaml 4.01.0 中缺少 Option.default

Missing Option.default in OCaml 4.01.0

我会使用 String.Set.choose some_set 从一组中挑选一个字符串。

此方法 returns StringOption,但我想使用另一个方法和第二个 return 值,因此我想将 StringOption 转换为字符串。

根据 OCaml 文档 (link here),我知道 Option.default 应该这样做,但由于某些原因它丢失了(尽管 Option 与所有其他方法存在)。

有没有办法解决这个问题或让我的下一个方法接受 StringOption?

谢谢,

首先,这些不是 OCaml 文档 :-) 它是一个附加库。该特定存储库已过时(就像 Sourceforge 上的几乎所有其他内容一样),并且其选项模块已合并到 OCaml Batteries Included as the BatOption 模块中。 Batteries 也是一个附加库,但它是使用最广泛的库之一。

您可以编写自己的函数来从字符串选项中提取字符串,只要您在值实际为 None 时决定要执行的操作即可。在那种情况下,当然没有字符串。

一种可能性是在这种情况下引发异常。如果您确定总是有一个字符串,则永远不会发生异常。如果它确实发生了,你就知道你有问题了。因此,您可以编写如下函数:

let string_of_string_option so =
    match so with
    | None -> failwith "string_of_string_option, no string"
    | Some str -> str

(此函数的工作方式类似于 List.hd;即,它是一个部分函数,​​当输入无效时会引发异常。)

你也可以编写自己的版本default;这是一个极其简单的函数:

let my_default dflt vo =
    match vo with
    | None -> dflt
    | Some v -> v

获取当前 OCaml 文档的一个好方法是浏览 ocaml.org.

另一个非常流行的附加库是 Jane Street Core,如 here 所述。它有一个名为 Option.value 的函数,它类似于您要查找的 default 函数。 (其实我觉得这个名字好一点。)