什麼是創造OCaml中的界面以傳統的方式多發的實現?這可能與通過創建一個接口文件foo.mli
和實現文件foo.ml
單個實現一個接口,但你怎麼能在同一個界面中創建多個實現?接口與OCaml中
5
A
回答
5
如果你要擁有相同的簽名多個實現,定義你的簽名編譯單元內,而不是作爲一個編譯單元,以及(如果需要)同樣的模塊。還有的是,在標準庫的例子:OrderedType
簽名,描述一個類型和該類型的比較功能模塊:
module type OrderedType = sig
type t
val compare : t -> t -> int
end
此簽名定義都set.mli
和map.mli
(可以參考它作爲Set.OrderedType
或Map.OrderedType
,或者甚至自己寫出來:簽名是結構化的)。標準庫中有幾個編譯單元具有此簽名(String
,Nativeint
等)。您也可以定義自己的模塊,並且你不需要定義模塊在何時做什麼特別的:只要有一個名爲t
類型和一個叫t -> t -> int
類型的compare
值,該模塊具有簽名。在標準庫中有一個稍微詳細的例子:Set.Make
函子構建了一個模塊,其簽名爲OrderedType
,因此您可以通過這種方式構建集合。
(* All four modules passed as arguments to Set.Make have the signature Set.OrderedType *)
module IntSet = Set.Make(module type t = int val compare = Pervasives.compare end)
module StringSet = Set.Make(String)
module StringSetSet = Set.Make(StringSet)
module IntSetSet = Set.Make(IntSet)
9
您必須使用模塊和簽名。一個.ml
文件隱含地定義了一個模塊,以及一個.mli
其簽名。使用明確的模塊和簽名,您可以將簽名應用於多個不同的模塊。
見在線書籍「開發與應用ocaml的」的this chapter。
相關問題
- 1. Ocaml stdin接口
- 2. 如何與iPhone API接口OCaml?
- 3. 鏈接錯誤接口ocaml的Windows與外部c庫
- 4. ocaml嵌套模塊:執行ml與接口不匹配cmi
- 5. OCaml - 如何查看模塊的接口?
- 6. OCaml Plugin的任意類型的接口
- 7. 陣列與OCaml中
- 8. 與列表OCaml中
- 9. 接口與接口
- 10. OpenMP與OCAML
- 11. 隱藏在OCaml中的外部和內部接口和信息
- 12. 鏈接列表Ocaml
- 13. 類與接口
- 14. 與Runnable接口
- 15. 與RESTful接口
- 16. instanceof與接口
- 17. RegisterType與UnityContainer中的接口
- 18. OCaml的:與結構
- 19. 標題與PLplot,OCaml
- 20. 無法與OCaml的
- 21. 實現與接口集合的接口
- 22. C++/CLI接口類與接口結構
- 23. 實現接口與提供接口
- 24. 如何查找接口,即OCaml包提供的功能集?
- 25. 接口gsm與LPC2148
- 26. 與atmega16 GSM接口
- 27. Doctrine DQL與接口
- 28. .C接口與R
- 29. 接口類與類
- 30. webcam與stm32接口
非常感謝這本書鏈接。這在很多方面都非常有幫助。 – 2012-03-29 04:59:59