簡體   English   中英

OCaml 中的 include、require 和 open 之間有什么區別?

[英]What's the difference between include, require and open in OCaml?

例如,

包括: include Ppx_core

打開: open Core.Std

要求: #require "compiler-libs.common"

並使用: #use "topfind"

  • include在當前結構中 重新導出模塊的組件:您所在的模塊將包含Ppx_core所有定義。
  • open使模塊的組件 可以在輸入環境中 直接訪問 您可以直接輸入element而不是輸入Core.Std.element
  • #require是一個Topfind命令,用於查找庫並加載它,使您可以訪問它的模塊。
  • #use就像將完整文件直接復制到頂層一樣。

請注意, # -keywords 不是 OCaml 語言的一部分,而是頂級命令:如果您嘗試編譯文件,它們將不起作用。

模塊定義中的include Module.Name語句將包含來自名為Module.Name的模塊的所有定義。 這些定義將大致包含在復制粘貼時。 如果include Module.Name出現在模塊類型定義(又名簽名定義)內部,則Module.Name應該是有效的(編譯器已知的)模塊類型。 它將包括模塊類型的定義(不包括任何類型共享約束)。

出現在模塊實現和模塊簽名中的open Module.Name語句將允許您在不使用完全限定名稱的情況下Module.Name定義(值、類型、子模塊),即使用不帶Module.Name短名稱Module.Name前綴。

#require語句根本不是語句,也不是 OCaml 語法的一部分。 它是 OCaml 頂層的特殊指令 - 交互式循環。 同 ipython 一樣有自己的指令。 require指令將加載指定的包及其所有依賴項。 此外,該指令不是標准 OCaml 頂級發行版的一部分,而是由作為 ocamlfind 工具包一部分的topfind腳本添加的。 #use指令用於加載和評估腳本。 例如, #use "topfind"將從 OCaml 標准庫文件夾加載和評估topfind腳本。 此腳本將注冊require指令。 還有#load#load_rec指令,它們在更細粒度的級別上工作,而不是包——這些指令旨在加載庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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