簡體   English   中英

Clojure REPL和工作流程

[英]Clojure REPL and workflow

來自Haskell,我通常的工作流程是在ghci上:l <file name.hs>並使用我在那里的功能和ADT。

現在,我在典型的lein new app project上下文中使用lein repl 我在core.clj旁邊創建了一個testing.clj文件。 我在那里定義了兩個功能,一個協議和一個實現該協議的記錄。 我能夠通過(use 'testing.testing :reload)使用該功能,但問題是我無法使用實際記錄:

(def c (Something. 0))

我得到:

CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: Something

那么,在這種情況下,“更好”的工作流程是什么? 在我不想直接在REPL上設置功能,協議,記錄的地方,但是我也不想依賴我的core.cls文件? 我只想要一個文件,我可以在其中轉儲一堆東西並使用它。

PS:我的環境是Mac OSX Terminal + Sublime

編輯:幾分鍾后,我可以通過以下方式加載記錄:

  1. (load-file <file name>)
  2. (import 'testing.testing.Something)

我的意思是,肯定有比這更好的方法了……:/我只想加載所有內容。 另一方面,我能夠使用記錄實現的協議方法。

您是否嘗試過使用為創建記錄自動定義的便捷功能? 在此示例中,它將是(->Something 0)

(Something. 0)正在使用Java構造函數,該構造函數要求分別導入Java類。 當您定義記錄以允許Java與您在Clojure中定義的內容互操作時,會自動創建Java類。

使用(->Something 0)語法是正確的方法, (use 'testing.testing :reload)后應該可以(use 'testing.testing :reload)

編輯鑒於以上內容似乎無濟於事,請按以下逐步說明操作,以獲取一個最小的工作示例

  1. 你有一個應用程序目錄testing與創建lein new app testing
  2. testing/src/testing ,創建包含以下兩行的testing.clj

     (ns testing.testing) (defrecord Something [n]) 
  3. 從項目目錄中運行lein repl
  4. 將名稱空間與(use 'testing.testing :reload)一起(use 'testing.testing :reload)
  5. (:n (->Something 42))將創建Something的實例並檢索其n成員的值-在這種情況下為42。

暫無
暫無

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

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