繁体   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