[英]modular programming in ocaml
我在ocaml
項目上找到了一些我不太懂的東西。
假設我正在使用OCaml標准庫的Array
和List
模塊。 它們都實現了函數length
但具有不同的類型。 在List
模塊中,這是它的類型:
length: a' list -> int
在Array
模塊中,它具有以下類型:
length: a' array -> int
但后來我希望你通過open
關鍵字在我實現的同一個模塊中使用這兩個模塊:
open List
open Array
當我嘗試在列表上使用length
函數時,我在編譯期間遇到了類型錯誤。
由於OCaml是一種強大的靜態類型語言,我想知道為什么編譯器不知道我想要列表模塊的長度函數,因為我聲明我正在使用它們。
OCaml不會根據其類型選擇一個或另一個函數。
當你寫作
open Array
模塊Array
的功能是屏蔽具有相同名稱的模塊List
。 當您稍后調用函數length
,OCaml會查找名為length
的函數,查找Array.length
,並抱怨此函數沒有兼容類型。
通常的方法是調用List.length
(而不僅僅是length
),如果這是你需要的功能。
更常見的是,OCaml沒有名稱重載(即具有兩個具有相同名稱但具有不同參數類型的函數或運算符),特別是因為這會使類型推斷更加困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.