[英]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
編輯:幾分鍾后,我可以通過以下方式加載記錄:
(load-file <file name>)
(import 'testing.testing.Something)
我的意思是,肯定有比這更好的方法了……:/我只想加載所有內容。 另一方面,我能夠使用記錄實現的協議方法。
您是否嘗試過使用為創建記錄自動定義的便捷功能? 在此示例中,它將是(->Something 0)
。
(Something. 0)
正在使用Java構造函數,該構造函數要求分別導入Java類。 當您定義記錄以允許Java與您在Clojure中定義的內容互操作時,會自動創建Java類。
使用(->Something 0)
語法是正確的方法, (use 'testing.testing :reload)
后應該可以(use 'testing.testing :reload)
。
編輯鑒於以上內容似乎無濟於事,請按以下逐步說明操作,以獲取一個最小的工作示例
testing
與創建lein new app testing
在testing/src/testing
,創建包含以下兩行的testing.clj
(ns testing.testing) (defrecord Something [n])
lein repl
(use 'testing.testing :reload)
一起(use 'testing.testing :reload)
(:n (->Something 42))
將創建Something
的實例並檢索其n
成員的值-在這種情況下為42。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.