我要用它String.Set.choose some_set从一组中挑选一个字符串.
这个方法返回StringOption,但我想使用另一个方法,返回值为第二个,因此我想将StringOption转换为字符串.
我知道根据OCaml docs(链接在这里) Option.default应该这样做但是由于某种原因它缺失(尽管 Option其他所有方法都存在).
有没有办法解决这个问题或让我的下一个方法接受StringOption?
谢谢,
首先,那些不是OCaml文档:-)它是一个附加库.该特定存储库已过时(与Sourceforge上几乎所有其他存储库一样),其Option模块已合并到OCaml Batteries中,作为BatOption模块.电池也是一个附加库,但是使用最广泛的库之一.
您可以编写自己的函数来从字符串选项中提取字符串,只要您确定实际值时要执行的操作即可None.在那种情况下,当然没有字符串.
一种可能性就是在这种情况下提出例外.如果你是积极的,总会有一个字符串,那么异常永远不会发生.如果确实发生了,你知道你有问题.所以,你可以写一个这样的函数:
let string_of_string_option so =
match so with
| None -> failwith "string_of_string_option, no string"
| Some str -> str
Run Code Online (Sandbox Code Playgroud)
(此函数的作用类似List.hd;即,它是一个部分函数,当输入无效时会引发异常.)
你也可以写自己的版本default; 这是一个非常简单的功能:
let my_default dflt vo =
match vo with
| None -> dflt
| Some v -> v
Run Code Online (Sandbox Code Playgroud)
获取当前OCaml文档的一个好方法是通过ocaml.org.
另一个非常受欢迎的附加库是Jane Street Core,在这里描述.它有一个名为的函数Option.value,类似于default您正在寻找的函数.(事实上,这个名字对我来说似乎好一点.)