2

Clojure 和 Eclipse 的新手,请多多包涵。

我在安装了逆时针 (CCW) 和 Leiningen 的 Eclipse Juno 下运行 Clojure 1.5.1,我正在 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 Explorer 窗格中选择“myproject”,单击 Run-Debug As-Clojure Application,然后启动一个 REPL。现在,这是问题/问题:如果我输入(hello "Fred")REPL 我得到

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-Alt-S(在 Windows 上)将代码“发送”到 REPL 来启动 REPL,我可以简单地键入(hello "Fred")并获得预期的输出。当然,这样做不会启动调试器,不会设置断点等。

我的问题:有没有办法在 Eclipse 调试器下运行代码,当代码通过 Ctrl-Alt-S“发送”到 REPL 时自动识别命名空间,不必使用requireor use,也不必用命名空间完全限定函数名称?

4

1 回答 1

2

Ctrl-Alt-N 绑定到 CCW 中的“将 REPL 切换到文件的命名空间”。REPL 从命名空间“user”开始,一旦你切换到“myproject.core”,应该没有任何需要userequire任何东西。您还可以使用 REPL 切换命名空间in-ns

于 2013-10-12T01:25:33.207 回答