2015-09-15 65 views
2

我已經從ocaml的標準庫使用Bytes模塊,並打開Core_kernel.Std模塊在該文件的頂部的程序如何避免Ocaml中的stdlib模塊出現陰影?

open Core_kernel.Std 

... 

    let let buf = Bytes.make bom_len '\x00' in 

我遇到的問題是,CORE_KERNEL的最新版本中引入了一個新的Bytes模塊隱藏了標準庫中的模塊,導致編譯錯誤Unbound value Bytes.make

有沒有辦法解決這個命名問題,而不是擺脫文件頂部的open?如果我這樣做,它需要改變很多東西。

回答

5

你可以爲Bytes模塊等提供替代名稱:

module B = Bytes 

open Core_kernel.Std 

let buf = B.make 10 '\x00' 

,然後做你的代碼通過B改變Bytes搜索替換。

另一種解決方案是避免使用open,但這需要在代碼中進行很多更改,我猜。

+0

我寧願將它稱爲'Stdlib_Bytes',但除此之外,我同意你的看法。 –

+0

我接受這個答案,因爲它解決了我的問題,並在一般情況下工作。然而,在特定的Core_kernel陰影案例中,Stas的答案一旦登陸opam就可能會更好。 – hugomg

3

Core_kernel規定Caml模塊,它綁定標準庫中可用的所有內容。

所以,你可以這樣寫

open Core_kernel.Std 

... 

    let buf = Caml.Bytes.make bom_len '\x00' in 

不幸的是,Caml.Bytesadded僅在113.00.00版本,是不是在OPAM呢。