Clojure 程式設計/示例
此頁面收集了 Clojure 程式碼示例。這是一個動態列表,歡迎您貢獻。為了使它儘可能相關,請遵守以下準則
- 為您的條目建立一個單獨的頁面。將其放在 Clojure_Programming/Examples/Your_Example_Name 中
- 建立一個關於您的示例的一段摘要,並將其放在此頁面中。
- 記住連結到您的示例
感謝您為幫助 Clojure 社群做出的貢獻!
可以在此處找到 JDBC 資訊。該頁面仍在開發中。
Norvig 的拼寫校正器
[編輯 | 編輯原始碼]Peter Norvig 寫了一個關於拼寫校正器的優秀示例。您可以檢視如何編寫拼寫校正器以獲得更詳細的解釋。
您可以檢視 Clojure 示例此處
簡單的套接字 REPL
[編輯 | 編輯原始碼]透過網路訪問 REPL 對於許多情況非常有用,從設計網站到除錯太空中的衛星。這裡是一個示例。
簡單的 GUI:溫度轉換器
[編輯 | 編輯原始碼]簡單的 GUI 應用程式示例(來自討論組,更新至 20080329 版)。它基於 Swing,您可以在這裡找到它。
斐波那契數列 是無限遞迴序列 的一個經典示例。Clojure 的延遲函式是實現這種數學構造的絕佳方法。您可以在這裡看到一個詳細的示例。
與 Excel 互動
[編輯 | 編輯原始碼]透過COM 與其他程式進行介面互動在Java 中使用 JACOB 庫可以輕鬆實現。但是,在與應用程式互動時處理所有底層介面非常繁瑣。尤其是當介面是為 C 而不是為 Java 設計的,更不用說 Clojure 了。因此,我們將嘗試利用 Clojure 的強大功能來改善這種情況。
詳細解釋在此。
本教程 解釋瞭如何建立簡單的“Hello World!”小程式。本文還解釋瞭如何簽名小程式(如果需要反射)。
gen-class 函式提供了 Clojure 中最通用和最強大的機制來定義新的 Java 類。如果您需要實現現有的介面,您可能可以使用更簡單的 proxy 函式,但如果您需要定義新的 Java 例項方法,您可能需要使用 gen-and-load-class 或 gen-and-save-class。
作為快速介紹,以下是一個名為 MyClass 的新類在名為 foo 的包中的示例。此類有兩個方法:mymethod,一個標準的 Java finalize
(gen-and-load-class 'foo.MyClass
:methods [['mymethod [String] String]
['finalize [] Void/TYPE]])
此時,類已存在並已載入到 JVM 中,但尚未有用,因為方法沒有定義。像這樣定義它們
(clojure/ns foo)
(defn MyClass-mymethod [this m]
(str "Your arg was: " m))
(defn MyClass-finalize [this]
(println "Finalizing " this))
現在,此類可以在 Clojure 中像任何 Java 類一樣使用
(println (.mymethod (new foo.MyClass) "foo"))
該示例建立了一個新例項,呼叫了 mymethod 並列印了返回值。finalize 方法可能尚未被呼叫,但顯式呼叫垃圾收集器可能會觸發它
(System/gc)
有關更具對話性的方法,請參閱Google Groups 原始執行緒。
感謝 Timothy Pratley、pmf 和 Michael Wood 幫助找到了解決方法。
user=> (defn str-invoke [instance method-str & args]
(clojure.lang.Reflector/invokeInstanceMethod
instance
method-str
(to-array args)))
#'user/str-invoke
user=> (def i "sampleString")(def m "substring")(def args [2,3])
#'user/i
#'user/m
#'user/args
user=> (apply str-invoke i m args)
"m"
user=>
(defn str-set [instance field-str arg]
(clojure.lang.Reflector/setInstanceField
instance
field-str
arg))