2013-10-11 62 views
2

新手來Clojure和Eclipse,請耐心等待。在Eclipse中調試Clojure

我在逆時針(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的」,點擊運行調試AS-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-Alt-S(這在Windows上)將代碼「發送」到REPL來啓動REPL,我可以簡單地鍵入(hello "Fred")並獲得預期的輸出。當然,這樣做並不會啓動調試器,也不會產生斷點等。

我的問題:有沒有一種方法可以在Eclipse調試器下運行代碼,讓命名空間自動識別,因爲它是在代碼通過Ctrl-Alt-S「發送」到REPL,而不必使用requireuse,而不必使用命名空間完全限定函數名稱?

回答

2

Ctrl-Alt-N綁定到CCW中的「將REPL切換到文件的命名空間」。 REPL從命名空間「user」開始,一旦切換到「myproject.core」,就不需要userequire任何東西。您也可以使用in-ns與REPL切換命名空間。