2010-07-12 10 views
8

Ich brauche einige sehr grundlegende Ratschläge, wie man entlang der Linien von einer Arbeits -main Funktion in IntelliJ definieren:definieren Clojure -main Funktion in IntelliJ

(ns clojure.examples.hello 
    (:gen-class)) 

(defn -main 
    [greetee] 
    (println (str "Hello " greetee "!"))) 

Wenn ich ein Projekt erstellen, fügen Sie den obigen Code in eine Quelldatei, und legen Sie die Laufkonfiguration (mit Script-Pfad, Modul, Working Dev und "Skript in REPL ausführen" ausgewählt), bekomme ich :java.lang.Exception: Unable to resolve symbol: -main in this context (NO_SOURCE_FILE:1)" immer wenn ich (-main "Some Greeting") ausführen. Jeder Rat wäre hilfreich.

+0

webdestroya: Danke, dass du das lesbar gemacht hast! – Marc

Antwort

5

Ich denke, dass La Clojure REPL im Namespace user beginnt (wie die meisten - alle? - Clojure REPLs tun); Sie müssen in den Namespace Ihres Projekts mit (in-ns 'clojure.examples.hello) oder (use 'clojure.examples.hello) wechseln, um dort definierte Funktionen aufzurufen. Besser noch, (require '[clojure.examples.hello :as hello]) und nennen sie als (hello/-main "IDEA").

+0

Sieht so aus, als wäre es ein Namespace-Problem und die Verwendung von (in-ns 'clojure.examples.hello) am REPL-Befehl bringt mich in den richtigen Namespace. IntelliJ erstickt an den anderen Befehlen. Irgendeine Möglichkeit, dies nahtloser zu machen? – Marc

+0

Es gibt keinen "nahtloseren" Weg. Wenn Sie den Code in einem bestimmten Namespace verwenden möchten, müssen Sie sich entweder in diesem Namespace befinden oder diesen Namespace verwenden. Normalerweise verwende ich den Namespace, damit ich genauer nachspreche, wie es wäre, diese Bibliothek in einer anderen Bibliothek zu verwenden. –

+0

Durch Verwendung von Eclipse für Java und Counterclockwise nahtloser gefunden. Lassen Sie IJ fallen und gehen Sie mit E. – Marc