2015-06-13 60 views
2

我最好使用String.Set.choose some_set挑選一組字符串。缺少Option.default OCaml中4.01.0

這個方法返回StringOption,但我想使用另一種方法與第二的返回值,所以我想給StringOption澆鑄成字符串。

我根據OCaml的文檔(link here),其Option.default應該這樣做,但因爲某種原因它丟失(雖然Option用的方法,其餘全部存在)知道。

有沒有辦法來解決這個還是讓我的下一個方法接受StringOption?

感謝,

回答

4

首先,這些都不是OCaml的文檔:-)這是一個附加庫。該特定存儲庫已過時(與Sourceforge上的其他幾乎所有其他存儲庫一樣),其選項模塊已作爲BatOption模塊併入OCaml Batteries Included。電池也是一個附加庫,但是它是使用最廣泛的庫之一。

爲你決定你想要做什麼,當值實際上是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

另一種非常流行的附加庫是簡街核心,描述here。它有一個名爲Option.value的函數,它與您正在查找的default函數類似。 (其實這個名字好像對我來說好一點。)

+0

嗨,傑弗裏!感謝你及時的答覆!我調整了類似的東西,但在編譯期間,我得到'錯誤:未綁定值string_of_string_option'。我打電話給''用string_of_string_option String.Set.choose free_Vars' – cyber101

+0

嗯。我並不是說已經有一個名爲'string_of_string_option'的函數。我說你可以很容易地寫出你自己的。你也可以編寫你自己的'default'版本。或者你可以使用OCaml Batteries包含的'default'。你有很多選擇:-) –