簡體   English   中英

ocaml中的模塊化編程

[英]modular programming in ocaml

我在ocaml項目上找到了一些我不太懂的東西。

假設我正在使用OCaml標准庫的ArrayList模塊。 它們都實現了函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM