[英]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.