例如,OCaml中的include,require和open有什麼區別?
包括:include Ppx_core
開放:open Core.Std
要求:#require "compiler-libs.common"
和使用:#use "topfind"
例如,OCaml中的include,require和open有什麼區別?
包括:include Ppx_core
開放:open Core.Std
要求:#require "compiler-libs.common"
和使用:#use "topfind"
include
re-exports在當前的所述模塊的部件海峽ucture:您所在的模塊將包含Ppx_core
中的所有定義。open
使打字環境中的模塊directly accessible的組件。您可以輸入element
而不是輸入Core.Std.element
。#require
是一個Topfind命令,用於查找庫並加載它,使其模塊可供您訪問。#use
表現得好像copying a full file直接進入您的頂層。請注意,#
關鍵字不是OCaml語言的一部分,但是是頂層命令:如果您嘗試編譯文件,它們將不起作用。
模塊定義中的include Module.Name
語句將包含來自名爲Module.Name
的模塊的所有定義。這些定義將被大致包括在複製粘貼中。如果include Module.Name
發生在模塊類型定義(也稱爲簽名定義)內部,Module.Name
應該是有效的(編譯器已知的)模塊類型。它將包含模塊類型的定義(不包括任何類型共享約束)。
的open Module.Name
語句都模塊實現與模塊的簽名出現,讓你參考的定義(值,類型,子模塊)一Module.Name
,而無需使用一個完全合格的命名,即,使用短名稱沒有Module.Name
前綴。
#require
聲明根本不是聲明,也不是OCaml語法的一部分。它是OCaml頂層的特殊指令 - 交互式循環。與ipython相同的是它自己的指令。 require
指令將加載指定的包及其所有依賴項。此外,該指令不是標準OCaml頂層分發的一部分,而是由作爲ocamlfind工具包一部分的topfind
腳本添加的。 #use
指令用於加載和評估腳本。例如,#use "topfind"
將加載並評估OCaml標準庫文件夾中的topfind
腳本。該腳本將註冊require
指令。還有#load
和#load_rec
指令,它們工作在更精細的級別上,而不是包 - 這些指令是加載庫的入口。