2014-12-28 139 views
1

來自Haskell,我平常的工作流程是在ghci上使用:l <file name.hs>,並使用我在那裏的函數和ADT。Clojure REPL和工作流程

現在我在典型的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:我的ENV是否爲Mac OS X的終端+崇高

編輯:後一兩分鐘,我能夠加載記錄:

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

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

+0

你想'加載文件'? https://clojuredocs.org/clojure.core/load-file – Kevin

+0

@Kevin添加了一個編輯。 – Peres

回答

1

您是否嘗試過使用自動定義的便利功能來創建記錄?在這個例子中,它將是(->Something 0)

(Something. 0)正在使用Java構造函數,它需要分別導入Java類。當您定義一條記錄以允許Java與您在Clojure中定義的事物互操作時,Java類將自動創建。

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

編輯鑑於上述情況似乎並沒有幫助,這裏的一些一步一步的指示來獲得一個最小的工作示例

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

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

'CompilerException java.lang.RuntimeException:無法解析符號: - >在這種情況下的東西' – Peres