簡體   English   中英

如何讓 Clojure 使用多個庫? Clojure 相當於 Java 中的 folder.* 是什么?

[英]How do you get Clojure to use multiple libraries? What's the Clojure equivalent to folder.* in Java?

我很好奇如何將多個文件作為更大文件夾系統的一部分導入?

假設我正在使用 leiningen,並且我在我的 project.clj 文件中提供了:dependencies 關鍵字,並為 leiningen 找到我的庫提供了正確的參數。 我知道我可以簡單地為我的源文件提供“(:use [folder.file])”並且當我從中調用函數時它會知道引用該特定文件,但是我如何讓它為所有那個文件夾里的文件? Clojure 做這件事的方法是什么,你可以在 Java 中用“file.*”做這件事?

Clojure 沒有通配符要求的命名空間(也沒有通配符導入 Java 類)。 在 Clojure 中確實沒有必要,因為命名空間往往相當大,相關函數的平坦 collections ——因為我們沒有像 Java 這樣的類,我們沒有趨向於數千個文件。

在工作中,我們有一個相當大的 Clojure 代碼庫:113k 行。 它是這樣分解的:

Clojure source 361 files 89724 total loc,
    3557 fns, 939 of which are private,
    570 vars, 30 macros, 90 atoms,
    85 agents, 24 protocols, 67 records,
    858 specs, 33 function specs.
Clojure tests 379 files 23795 total loc,
    4 specs, 1 function specs.

因此,平均源名稱空間約為 250 行,其中包含約 10 個函數。 我們有一些超過 1,000 行的命名空間(還有一個超過 2,000 行)。 一些命名空間需要“很多”其他命名空間,但這非常罕見:我想說我們的大多數命名空間只引入了大約六個命名空間。

Clojure 命名空間中也沒有層次結構。 一個項目為其命名空間采用唯一前綴是很常見的,例如最流行的next.jdbc庫的 next.jdbc,即使它具有“子命名空間”,例如next.jdbc.connection --ZCA87C7Z沒有嵌套或分組的語義。

Clojure 的明確“要求”帶來了一些好處。 意圖很明確,效果不太容易受到將來添加到目錄的影響,您可以更輕松地在沒有工具的情況下進行重構,並且如果您使用工具,您可以獲得更多關於主題的實時輸入建議。

但是“require”肯定不是將符號引入命名空間的唯一方法。 命名空間是開放的。 您可能適合自己:例如:Zach Tellman 的“potemkin”庫( https://github.com/clj-commons/potemkin )可以將來自多個命名空間的符號融合到一個可以被要求的命名空間中。

暫無
暫無

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

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