簡體   English   中英

Clojure的抽象結構

[英]Abstract structure of Clojure

我一直在學習 Clojure 並且當我意識到我仍然在努力解釋代碼時,這是通過一本關於它的書的好方法。 我正在尋找的是抽象結構、接口或規則,Clojure 用於解析代碼。 我認為它看起來像:

(some-operation optional-args)

optional-args幾乎可以是任何東西,這就是我開始感到困惑的地方。

(operation optional-name-string [vector of optional args])等於(defn newfn [argA, argB])

我認為這種模式適用於所有列表() ,但 Clojure 具有如此多的靈活性和變化,我不確定。 了解口譯員遵循的規則真的很有幫助。

在開始使用 Clojure 編碼之前,我強烈建議您學習函數式編程和 LISB。 在 Clojure 中,一切都是前綴,當你想運行特定的 function 時,你會調用它,然后用一些 arguments 喂它。例如, 1+2+3在 Clojure 中將是(+ 1 2 3) 。在換句話說,您調用的每個 function 都將位於括號的開頭,並且其所有 arguments 都將遵循 function 名稱。 如果你定義一個function,你可以這樣做:

(defn newfunc [a1 a2]
(+ 100 a1 a2))

其中 newfunc 添加 100 和 a1 和 a2。 當你調用它時,你應該這樣做:

(newfunc 1 2)

結果將是 103。在第一個示例中, +是一個 function,所以我們在括號的開頭調用它。 Clojure是一個充滿簡單的美好世界。 請深入學習。

你沒瘋。 當然,很容易指出 Clojure 語法是多么“簡單”(“簡單”?但另一個討論),但是新學習者需要注意兩件事,在開始的教程中沒有很清楚地指出這兩個問題,這使理解變得非常復雜你看到了什么:

  1. 解構。 在 Clojure 中花一些時間閱讀有關解構的指南 我會說這增加了語言的復雜性,與 Python 中的“*args”和“**kwargs”arguments 或 javascript 中使用“...”擴展運算符沒有什么不同。它們都足夠復雜需要一些專門的時間來閱讀。 這與您在上面引用的optional-args有關。

  2. 宏和元編程 在您上面提到的some-operation中,您希望“查看解釋器遵循的規則”。 在大多數情況下,它是一個 function,但 Clojure 並沒有告訴您您正在查看的是 function 還是宏。 在標准庫中,您只需要了解一些標准宏以及它們如何影響標題語法。 (例如,如果,定義等)。 對於包含的庫,通常會有一小部分宏是理解該庫的核心。 我敢說,任何宏都會修改,使您正在查看的括號中的語法復雜化,因此請保持警惕。

Clojure 非常棒且易於學習,但是恕我直言,不要掩蓋這兩點。

暫無
暫無

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

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