新手到Clojure和Eclipse,所以请容忍我。
我在Eclipse下运行Clojure 1.5.1,安装了逆时针(CCW)和Leiningen,并且正在测试在Eclipse调试器下运行Clojure代码的过程。我使用以下文件:
(ns myproject.core)
(defn foo [str]
(println str "Hello, World!")
)
(defn hello [who]
(str "Hello " who "!"))
我在(println str "Hello, World!")
和(str "Hello " who "!"))
行上设置断点,在Package窗格中选择"myproject“,单击Run Clojure应用程序,然后启动REPL。现在,问题/问题是:如果我在REPL中键入(hello "Fred")
,就会得到
CompilerException java.lang.RuntimeException: Unable to resolve symbol: hello
in this context, compiling:(NO_SOURCE_PATH:1:1)
如果我试图将过程调用限定为(myproject.core/hello "Fred")
,则会得到相同的错误。我让它运行的唯一方法是先发出(require 'myproject.core)
,然后发出(myproject.core/hello "Fred")
。一旦我这样做,断点就被识别出来了,代码在正确的位置中断了,变量是可见的,生活也很好。
如果我键入(use 'myproject.core)
而不是(require 'myproject.core)
,我不需要完全限定函数名,但我的理解是,不推荐使用use
。
另一方面,如果我通过使用Ctrl(在(hello "Fred")
上)“发送”代码到REPL来启动REPL,我只需输入(hello "Fred")
并获得预期的输出。当然,这样做不会启动调试器,也不会获取断点,等等。
我的问题是:是否有一种方法可以在Eclipse调试器下运行代码,当代码通过Ctrl“发送”到REPL时,是否可以自动识别名称空间,而不必使用require
或use
,而不必完全限定名称空间的函数名?
发布于 2013-10-11 17:25:33
在CCW中,Ctrl被绑定为“将REPL切换到文件的名称空间”。REPL从名称空间"user“开始,一旦切换到"myproject.core",就不需要use
或require
了。您还可以使用带有in-ns
的REPL切换名称空间。
https://stackoverflow.com/questions/19325139
复制相似问题