我要使用String.Set.choose some_set
从集合中挑选字符串。
此方法返回StringOption,但我想使用另一个方法返回第二个值,因此我想将StringOption转换为字符串。
根据OCaml文档(link here)我知道Option.default
应该这样做但是由于某种原因它会丢失(尽管Option
与其余所有方法存在)。
有没有办法解决这个问题,或让我的下一个方法接受StringOption?
谢谢,
答案 0 :(得分:5)
首先,那些不是OCaml文档:-)它是一个附加库。该特定存储库已过时(与Sourceforge上的其他所有存储库一样),其Option模块已作为OCaml Batteries Included模块合并到BatOption中。电池也是一个附加库,但是使用最广泛的库之一。
您可以编写自己的函数来从字符串选项中提取字符串,只要您在值实际为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
函数。 (事实上,这个名字对我来说似乎好一点。)